LISP

函数型言語とは

繰り返し処理を定義する (define zero (lambda (s) (lambda (z) z))) (define one (lambda (s) (lambda (z) (s z)))) (define two (lambda (s) (lambda (z) (s(s z))))) (define three (lambda (s) (lambda (z) (s(s(s z)))))) 0にadd1を2回適用する ((two …

データ構造

Last In First Out (LIFO) (define stack '()) (define set-stack (lambda () (set! stack '()) 'done)) (define push (lambda (x) (cond ((null? stack) (set! stack (list x))) (else (set! stack (cons x stack)))) stack)) (define pop (lambda () (let …

級数と再帰

順列・組み合わせ・重複組み合わせの通りの数はなので (define perm (lambda (n r) (cond ((= r 0) 1) ((= r 1) n) (else (* n (perm (- n 1) (- r 1)))) ))) (define comb (lambda (n r) (cond ((= r 0) 1) ((= r n) 1) (else (+ (comb (- n 1) (- r 1)) (c…

関数を定義する

こちらでLISPの手習い中 ひとまず関数をひたすら書いてみる (define non (lambda (x) 'non)) (define id (lambda (x) x)) (define add1 (lambda (x) (+ x 1))) (define sub1 (lambda (x) (- x 1))) (define ++ (lambda (i) (+ i 1))) (define -- (lambda (i)…

LISP事始め

Emacs LISPもちょっとやってみた。『素数夜曲』と合っていないこともあり、超難航! Racket, Scheme R5RSでやることに変更(前の記事) Lisp Cabinetというのが比較的簡単な環境のようなのでダウンロードすることにする(こちらがダウンロードサイト)。ひたすら…