Software Engineering Lecture 5/9
Software Engineering Lecture 5/9
前回の復習
- 論理 ... 仕様
- 関数 ... 実装
- 集合 ... 実行
参考文献
- M. Ben-Ari, Mathematical Logic for Computer Science, Prentice Hall
- Bertrand Meyer, プログラミング言語理論への招待, ASCII
集合や関数をコンピュータでどう扱えば良いか?
S-式は以下の要素からなる。
LISP と 関数型プログラミング
λ式の例
f(x) = x + 2
の時に
f = λx (x + 2)
と表す。
f 2 = (λx (x + 2)) 2 = 2 + 2 = 4
関数を表すS-式、リスト式を処理する関数
S-式を使って関数を表す。 最初の要素を関数の名前と考える。
- (+ 1 1)
- (* 4 3)
- (> 1 100)
関数を定義したり、S-式を作ったりする
- '(a b c)
- (defun add1 (x) (+ x 1))
- (if (= x 1) 0 1)
- (setf x '(a b c))
S-式を取り扱う関数
- car, cdr, cons, list
- null, listp, atom
- caar, cdar, cddr, ...
例題1
>(setf x '(a b c))
(A B C)
>(car x)
A
>(cdr x)
(B C)
>(null x)
NIL
>(listp x)
T
>(atom x)
NIL
例題2 リストを処理するなら再帰を使うのが普通
(defun length1 (x y)
(if (null x)
y
(length1 (cdr x) (+ y 1))))
(defun append1 (x y)
(if (null x)
y
(cons (car x) (append1 (cdr x) y))))
(defun last1 (x)
(if (null (cdr x))
(car x)
(last1 (cdr x))))
これらは、LISP 1.5風のプログラムだ。
... が、しかし、Common LISP は、CやPascalのようにプログラミング
することもできる。
(defun program ()
(progn
(print 'a)
(print 'b)
(print 'c)))
GNU Common LISP (GCL) の使い方
- 動かし方
- 止め方
- プログラムの入力
- マニュアルの見方 (info)
- Emacs から使って見る
Emacs の .emacs に付けるおまじない
(setq load-path (append load-path
'("~/etc/emacs" "/usr/open/lib/gcl-2.2/elisp" ".")))
(autoload 'dbl "dbl" "" t)
(setq dbl-mode-hook '(lambda () (dbl-call "gcl")))
Prev
Next
Kono's home page