<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                第十章 關聯表和表格 =================== 關聯表是Scheme一種特殊形式的列表。列表的每一個元素都是一個點對,其中的car(左邊的元素)被稱為一個“鍵”,cdr(右邊的元素)被稱為和該鍵關聯的值。例如: ```scheme ((a . 1) (b . 2) (c . 3)) ``` 調用程序`(assv k al)`能在關聯表`al`中找到和鍵`k`關聯的CONS單元。在查找時關聯表中的鍵與`k`使用`eqv?`過程來比較。然而有時我們可能希望自定義一個鍵的比較函數。例如,如果鍵是不區分大小寫的字符串,那默認的`eqv?`就沒什么用了。 我們現在定義一個結構`table`(表格),這是一個改進后的關聯表,它可以允許用戶在它的鍵上自定義比較函數。它的字段是`equ`和`alist`。 ```scheme (defstruct table (equ eqv?) (alist '())) ``` (默認的比較函數是`eqv?`——對于一個普通的關聯表——關聯表的初始化為空。) 我們將使用程序`table-get`得到與一個給定鍵關聯的值(相對于cons單元)。`table-get`接受一個`table`(表格)和一個鍵作為參數,還有一個可選的默認值,這樣若在表格中未找到該鍵則返回該默認值: ```scheme (define table-get (lambda (tbl k . d) (let ((c (lassoc k (table.alist tbl) (table.equ tbl)))) (cond (c (cdr c)) ((pair? d) (car d)))))) ``` 在`table-get`中使用的程序`lassoc`,定義如下: ```scheme (define lassoc (lambda (k al equ?) (let loop ((al al)) (if (null? al) #f (let ((c (car al))) (if (equ? (car c) k) c (loop (cdr al)))))))) ``` 程序`table-put`用來更新給定表格中的一個鍵的值: ```scheme (define table-put! (lambda (tbl k v) (let ((al (table.alist tbl))) (let ((c (lassoc k al (table.equ tbl)))) (if c (set-cdr! c v) (set!table.alist tbl (cons (cons k v) al))))))) ``` 程序`table-for-each`為每個表格中鍵/值對調用給定的程序 ```scheme (define table-for-each (lambda (tbl p) (for-each (lambda (c) (p (car c) (cdr c))) (table.alist tbl)))) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看