2015年6月11日木曜日

開発環境

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

コメントを投稿