SICP學習筆記 2 2 1 序列的表示

2021-09-01 10:23:27 字數 2491 閱讀 4998

練習2.17

;; 直接利用已經實現的list-ref和length過程即可

(define (last-pair items)

(if (null? items)

(display "null")

(list-ref items (- (length items) 1))))

練習2.18

;; 翻轉即為將列表第二個元素翻轉再加上第乙個元素

(define (reverse items)

(if (null? items)

'();; 翻轉即為倒序取列表值再組合成新的列表

(define (reverse items)

(define (reverse-iter a n)

(if (< n 0)

'()(cons (list-ref a n) (reverse-iter a (- n 1)))))

(reverse-iter items (- (length items) 1)))

練習2.19

(define (no-more? coin-values)

(null? coin-values))

(define (except-first-denomination coin-values)

(cdr coin-values))

(define (first-denomination coin-values)

(car coin-values))

1 ]=> (cc 100 us-coins)

;value: 292

1 ]=> (cc 100 (reverse us-coins))

;value: 292

;; 改變coin-values的順序不會影響結果

;; 因為在cc過程中遞迴的累加 只用某種幣值的兌換種數和除去這種幣值後的兌換種數, 因此和次數無關

練習2.20

;; 首先定義flag過程, 以判斷傳入的兩個數是否奇偶性一致

;; 然後在get-list過程中遞迴使用cdr取列表的剩餘部分完成奇偶性檢查

;; 最後將引數拼接成列表呼叫get-list過程

(define (same-parity x . y)

(define (flag a b)

(= (remainder a 2) (remainder b 2)))

(define (get-list items)

(if (null? items)

'()(if (flag x (car items))

(cons (car items) (get-list (cdr items)))

(get-list (cdr items)))))

(get-list (cons x y)))

1 ]=> (same-parity 1 2 3 4 5 6 7)

;value : (1 3 5 7)

1 ]=> (same-parity 2 3 4 5 6 7)

;value : (2 4 6)

1 ]=> (same-parity 2 2 0 128 6 7)

;value : (2 2 0 128 6)

練習2.21

(define (square-list items)

(if (null? items)

'()(cons (square (car items))

(square-list (cdr items)))))

(define (square-list items)

(map (lambda (x) (square x)) items))

練習2.22

;; louis在組成新的結果時, 在cons的兩個引數上搞反了

;; 調整之後因為對列表和數值直接結合導致出現如下結果

;value : (((((() . 1) . 4) . 9) . 16) . 25)

;; 因此做如下修正, 將數值變換為列表然後再和之前的結果相加

(define (square-list items)

(define (iter things answer)

(if (null? things)

answer

(iter (cdr things)

(list (square (car things)))))))

(iter items '()))

練習2.23

(define (for-each proc items)

(if (null? items)

'()(and (proc (car items))

(for-each proc (cdr items)))))

Oracle學習筆記20150906序列

1.oracle中用sequence 序列 來實現自動增長列.序列由使用者建立資料庫物件,並可有多個使用者物件共享,一般用於主鍵或者唯一列.2.create sequence myseq序列名 start with 1從1開始遞增 increment by 1每次遞增1 maxvalue 99 no...

Oracle學習筆記 10 序列

當在開發中,我們查詢到一組資料,希望這組資料帶有一列自增的編號時。在mysql資料庫中,字段可以設定一種型別,auto increment 自增 當乙個字段設定 auto increment 型別後,給定乙個初始的數字,之後每加入一條新的記錄,該條記錄的這個欄位的值都會在原來的基礎上加1。這個屬性也...

Python 學習筆記三 序列

sequence 序列 是一組有序的元素的集合,序列可以有任何元素,也可以沒有元素 元組與表的區別 一旦建立,tuple的各個元素不可再變更,而list的各個元素可以再變更 s1 1,2,zhansan 李四 false s2 1,2,zhansan lili true print s1,type ...