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.4(比較関数: eq、equal、そしてもっと)をSchemeで取り組んでみる。
4.4(比較関数: eq、equal、そしてもっと)
コード(Emacs)
(begin
(define print (lambda (x) (display x) (newline)))
(newline)
;; Scheme のブーリアン値(#t または #f)を返す手続き(述語、比較関数)は、
;; eq?、equal?、eqv? 等
;; kscheme にまだ eqv? 手続きを仕様どおりに実装してないからとりあえず
(define eqv?
(lambda (obj1 obj2)
(if (eq? obj1 obj2) #t #f)))
(define *fruit* (quote apple))
(print (cond ((eq? *fruit* (quote apple))
(quote its-an-apple))
((eq? *fruit* (quote orange))
(quote its-an-orange))))
(print (equal? (quote apple)
(quote apple)))
(print (equal? (list 1 2 3)
(list 1 2 3)))
(print (equal? (quote (1 2 3))
(cons 1 (cons 2 (cons 3 (quote ()))))))
(print (equal? 5 5))
(print (equal? 2.5 2.5))
(print (equal? "foo" "foo"))
(print (eq? "foo" "foo"))
;; kscheme にまだ 正確な数値と不正確な数値の実装をしてない
;; 数値はすべて正確な数値として実装してある。(GMP (GNU MP))
(print (eq? (quote foo) (quote foo)))
(print (eq? 3.4 3.4))
(print (eq? 0 0.0))
(print (equal? 0 0.0))
(quote done))
入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))
$ kscheme < sample4.scm kscm> its-an-apple #t #t #t #t #t #t #f #t #t #t #t done kscm> $
0 コメント:
コメントを投稿