SICPstudygroupライブラリ
あると便利な関数群を定義するページです。
自分が作った関数で便利な関数はどんどん追加していってください。(ただし名前の衝突には注意!)
ここにある関数は、練習問題を解く上で使用してもOKです。(ただしできれば使用したことを明記)
iota関数
構文:(iota count (start 0)opt (step 1)opt)
startから始まり、stepずつ増加する、 count 個の要素からなる数値のリストを返します
定義
(define (iota count . ls)
(let ((start (if (null? ls) 0 (car ls)))
(step (if (or (null? ls) (null? (cdr ls))) 1 (cadr ls))))
(define (iter n)
(if (= n 0)
'()
(append (iter (- n 1)) (list (+ start (* step (- n 1)))))))
(iter count))
)
使用例
SC> (iota 5)
(0 1 2 3 4)
SC> (iota 5 1 -0.1)
(1.0 0.9 0.8 0.7 0.6)
SC> (iota 7 2 0.2)
(2.0 2.2 2.4 2.6 2.8 3.0 3.2)
identity関数
構文:(identity n)
引数をそのまま返す恒等射関数
定義
(define (identity n) n)
inc関数
構文:(inc n)
引数nに1を加える。
定義
(define (inc n) (+ n 1))
dec関数
構文:(dec n)
引数nから1引く。
ただし、n == 0のときは0を返しマイナスは返さない。
定義
(define (dec n)
(if (<= n 0)
0
(- n 1)))
const関数
構文:((const n) <任意の引数>)
引数にかかわらずnを返す関数を返す。
定義
(define (const n) (lambda (i) n))
最終更新:2007年12月29日 22:21