2015年6月19日金曜日

開発環境

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 コメント:

コメントを投稿