2015年7月4日土曜日

開発環境

Land of Lisp (M.D. Conrad Barski (著)、川合 史朗 (翻訳)、オライリージャパン)の6.5章(Lambda: とても大事な関数なので特別に章を分けて説明しよう)、6.5.1(lambda がすること)、6.5.2(lambda がそんな大事なわけ)を Scheme で取り組んでみる。

6.5.1(lambda がすること)

コード(Emacs)

(begin
  (define map
    (lambda (proc items)
      (if (null? items)
          (quote ())
          (cons (proc (car items))
                (map proc (cdr items))))))
  
  (define print (lambda (x) (display x) (newline)))
  
  ;; Common Lisp と Scheme は関数の定義の方法が若干異なる
  ;; Scheme では、2つの定義方法がある。(Lisp でもそうなのかも。)
  (define (half-1 n)
    (/ n 2))
  (define half-2
    (lambda (n)
      (/ n 2)))

  ;; kscheme でどう出力ように実装されているか
  ;; display 手続きと write 手続き、どちらも同じように実装してある
  (print half-1)
  (print half-2)

  (print (lambda (n) (/ n 2)))

  (print (map (lambda (n) (/ n 2)) (quote (2 4 6))))

  (quote done))

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

$ kscheme sample.scm
#<procedure (n) ((/ n 2))>
#<procedure (n) ((/ n 2))>
#<procedure (n) ((/ n 2))>
(1 2 3)
done
$

0 コメント:

コメントを投稿