Land of Lisp
(オライリージャパン)
M.D. Conrad Barski (著) 川合 史朗 (翻訳)
原書: Land of LISP
Learn to Program in Lisp, One Game at a Time!
開発環境
- OS X Yosemite - Apple (OS)
- Emacs(Text Editor)
- Scheme (プログラミング言語)
- kscheme, Gauche, GNU Guile (処理系)
Land of Lisp (M.D. Conrad Barski (著)、川合 史朗 (翻訳)、オライリージャパン)の6.5章(Lambda: とても大事な関数なので特別に章を分けて説明しよう)、6.5.1(lambda がすること)、6.5.2(lambda がそんな大事なわけ)を Scheme で取り組んでみる。
6.5.1(lambda がすること)
コード(Emacs)
(begin
(define map
(lambda (proc items)
(if (null? items)
(quote ())
(cons (proc (car items))
(map proc (cdr items))))))
(define print (lambda (x) (display x) (newline)))
;; Common Lisp と Scheme は関数の定義の方法が若干異なる
;; Scheme では、2つの定義方法がある。(Lisp でもそうなのかも。)
(define (half-1 n)
(/ n 2))
(define half-2
(lambda (n)
(/ n 2)))
;; kscheme でどう出力ように実装されているか
;; display 手続きと write 手続き、どちらも同じように実装してある
(print half-1)
(print half-2)
(print (lambda (n) (/ n 2)))
(print (map (lambda (n) (/ n 2)) (quote (2 4 6))))
(quote done))
入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))
$ kscheme sample.scm #<procedure (n) ((/ n 2))> #<procedure (n) ((/ n 2))> #<procedure (n) ((/ n 2))> (1 2 3) done $
0 コメント:
コメントを投稿