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 (著)、川合 史朗 (翻訳)、オライリージャパン)の4章(条件と判断)、4.1(nil と () の対称性)をSchemeで取り組んでみる。
4.1(nil と () の対称性)
コード(Emacs)
(begin
;; Scheme では Common Lisp と違って空リストは真
;; #f が偽で、それ以外は全て真
(define print (lambda (x) (display x) (newline)))
(newline)
;; 真
(print (if (quote ())
(quote i-am-true)
(quote i-am-false)))
;; 真
(print (if (quote (1))
(quote i-am-tree)
(quote i-am-false)))
;; 唯一偽と評価される、#f
(print (if #f
(quote i-am-tree)
(quote i-am-false)))
;; ということで、Scheme でリストが空か確認するには null? 手続きを使う
(define my-length
(lambda (list)
(if (null? list)
0
(+ 1
(my-length (cdr list))))))
(print (my-length (quote (list width four symbols))))
;; Scheme では、(quote nil) はただの記号(シンボル)
;; 偽
(print (eq? (quote ())
(quote nil)))
;; 真
(print (eq? (quote ())
(quote ())))
;; 真
(print (eq? (quote nil)
(quote nil)))
(quote done))
入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))
$ kscheme < sample1.scm kscm> i-am-true i-am-tree i-am-false 4 #f #t #t done kscm> $
0 コメント:
コメントを投稿