<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 向量 * 向量是一組通過整數索引的數據 * 與表相比,向量更加緊湊且存取時間更短 ### 字面值 ``` #(1 2 3) ; 整數向量 '#(1 2 3) ;效果同上 '#(a 0 #\a) ; 由符號、整數和字符構成的向量 ``` ### 向量函數 ``` (vector-ref vector k) 返回向量vector的索引為k的元素 (vector->list vector) 將vector轉換為表 (list->vector list) 將list轉換為向量 (vector-length vector) 返回向量vector的長度 (make-vector k) 返回有k個元素的向量 (make-vector k fill) 所有的元素都會被初始化為fill ``` eg ``` (vector-length #(1 2 3)) ;3 (vector-ref #(2 4 5) 1) ;4 類似數組通過索引取值 (make-vector 2 ) ;(vector 0 0) (vector 1 1) ;(vector 1 1) ``` 一個對向量中元素求和的函數 ``` //定義 (define (vector-add v1 v2) (let ((lenv1 (vector-length v1)) (lenv2 (vector-length v2))) (if (= lenv1 lenv2) (let ((v (make-vector lenv1))) (let loop ((i 0)) (if (= i lenv1) v (begin (vector-set! v i (+ (vector-ref v1 i) (vector-ref v2 i))) (loop (+ 1 i)))))) (error "different dimensions.")))) //調用 (vector-add #(1 2 3) #(4 5 6)) ;(vector 5 7 9) ``` ## 結構體 這些結構體本質上來說都是向量 ``` define-struct 進行實例化 make-entry 進行初始化 ``` 實例一: 創建結構體 ``` (define-struct entry (name zip phone)) (define phonebook (make-entry 'PeterLee 15270 '606-7771)) (entry-name phonebook) => 'PeterLee (entry-zip phonebook) => 15270 (entry-phone phonebook) => '606-7771 (entry? phonebook) => #true ``` 實例二:修改并返回結構體 ``` ;; 創建結構體 (define-struct star (last first instrument sales)) ;;實例化 (define a-star (make-star 'Abba 'John 'vocls 10000)) ;; sales 添加 2000 (define (increment-sales foo-start) (make-star (star-last foo-start) (star-first foo-start) (star-instrument foo-start) (+ (star-sales foo-start) 2000) )) ;; 調用 (increment-sales a-star ) ``` ## cons 表 ### Cons單元和表 (類key-vlaue ) ``` `() ; '() empty ; '() ``` ![51635343-052D-46FB-9CC7-36D39316E578.png](http://yanxuan.nosdn.127.net/c106c52e332b4233ef80d93406973b24.png) :-: cons(表)的圖解 ### 復雜數據類型 ``` (define demo (cons 'hello (cons 3 (cons true empty)))) demo ;'(hello 3 #t) (cons? demo) ; #t // 使用 first 與 rest (first demo) ;'hello (rest demo) ;'(3 #t) (first (rest (cons 10 (cons 22 empty)))) ;=(first (cons 22 empty)) ;=22 ``` ### 判斷cons 中是否存在某個元素 ``` ; 描述: 判斷表中是否有 'doll 元素 ; 測試 ; emprt ->false ; '(w dll)->false ; '(w doll a)->true (define (contains-doll? a-list-of-symbols) (cond [(empty? a-list-of-symbols ) false] [(cons? a-list-of-symbols) (cond [(symbol=? (first a-list-of-symbols ) 'doll) true] [else (contains-doll? (rest a-list-of-symbols)) ])] [else 'contains-doll? "param type is eror"])) (define I (cons 'w (cons 'doll empty))) (contains-doll? I) ;#t ``` ### 結構體存入表中 通過名稱獲取商品圖片 ``` ; 設置物品的結構體 (define-struct goods (name price pictrue)) ; 通過物品名稱獲取物品照片 (define (shop-symbol? name list-struct) (cond [(empty? list-struct) false] [(symbol=? name (goods-name (first list-struct))) (goods-pictrue (first list-struct))] [else (shop-symbol? name (rest list-struct)) ] )) ;初始化商店物品 (define list-goods (cons (make-goods 'robot 29.95 'robot-p) (cons (make-goods 'doll 11.95 'doll-p) (cons (make-goods 'rocket 19.95 'rocket-p) empty)))) (shop-symbol? 'robot list-goods ) ;'robot-p (shop-symbol? 'robot empty) ;#flase ``` ### 表中套入表 ``` (define list-cons (cons 'a (cons 'b empty))) (define list-cons-1 (cons 'c (cons list-cons empty))) list-cons-1 ; (list 'c (list 'a 'b)) ``` ## list 1. 理解list表達式的一種簡單方法是將它當作若干cons的簡寫 ``` (list 1 2)=(cons 1 (cons 2 empty) ``` 2. 用 list 表示時,可以 省略 list 用 `'`代替 ``` (list 1 2 3) = '(1 2 3) (list 'a 'b 'c) = (list 'a 'b 'c) ;(list 'a 'b 'c) ``` 例子 ``` (list) ;Value: () (list 1 2) ;Value 27: (1 2) '(1 2 3 ) ;(list 1 2 3) (first (list 1 2 3)) ; 1 (rest (list 1 2 3)) ;(list 2 3) (append (list 'a 'b 'c ) (list 'd 'e)) ;(list 'a 'b 'c 'd 'e) ``` ## car(同 first)函數和cdr(同rest)函數 ``` (car '(1 2 3 4)) ;Value: 1 等價于 first (cdr '(1 2 3 4)) ;Value 18: (2 3 4) 等價于 rest ```
                  <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>

                              哎呀哎呀视频在线观看