2015年6月8日月曜日

開発環境

Land of Lisp (M.D. Conrad Barski (著)、川合 史朗 (翻訳)、オライリージャパン)の3章(Lisp の構文の世界を探検する)、3.3(Lisp はコードとデータをどう区別するか)をSchemeで取り組んでみる。

3.3(Lisp はコードとデータをどう区別するか)

コード(Emacs)

(begin
  (newline)
  (define print (lambda (x) (display x) (newline)))
  (define square (lambda (n) (* n n)))
  (define expt
    (lambda (x n)
      (if (= n 1)
          x
          (* x (expt x (- n 1))))))
  
  ;; コードモード
  (print (expt 2 3))
  (print (expt 2 (+ 3 4)))

  ;; データモード
  (print (quote (expt 2 3)))
  (print '(expt 2 3))

  ;; quote (シングルクォート)は手続きではなく構文(syntax)
  (print quote)
  'done)

入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))

$ kscheme < sample3_3.scm
kscm> 
8
128
(expt 2 3)
(expt 2 3)
#<syntax quote>
done
kscm> $

0 コメント:

コメントを投稿