ライブラリ

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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。