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 (著)、川合 史朗 (翻訳)、オライリージャパン)の5章(世界とのインターフェース: Lisp でのデータの読み書き)、6.1(テキストの表示と読み書き)を Scheme で取り組んでみる。
6.1(テキストの表示と読み書き)
コード(Emacs)
(begin
(newline)
;; Common Lisp の print 手続きは Scheme にはないっぽいので定義
;; Gauche には print はあるけど、write ではなく、display と同様の機能みたい
(define print (lambda (x) (write x) (newline)))
(print "foo")
(begin (print "this")
(print "is")
(print "a")
(print "test"))
;; Common Lisp の print1 手続きは Scheme にはない
;; write が同様の手続きに近いっぽい
(begin (write "this")
(write "is")
(write "a")
(write "test"))
(newline)
;; kscheme に入力に関係する手続き( read, read-line )がうまく実装できてないっぽいから
;; 関係するコメントアウトしてある箇所は、対話型コマンドラインに直接入力
;; p.79 訳注 と少し動作違うかも
;; (define say-hello
;; (lambda ()
;; (print "Please type your name:")
;; (let ((name (read)))
;; (print "Nice to meet you, ")
;; (print name))))
;; (say-hello)
;; (define add-five
;; (lambda ()
;; (print "please enter a number:")
;; (let ((num (read)))
;; (print "When I add five I get")
;; (print (+ num 5)))))
;; (add-five)
(print (quote 3))
(print (quote 3.4))
(print (quote foo))
(print (quote "foo"))
;; kscheme に文字型は、まだ未実装
(print (quote "a"))
;; Common Lisp の princ 手続きは Scheme の display 手続きと同様の機能っぽい
(display (quote 3))
(display (quote 3.4))
(display (quote foo))
(display (quote "foo"))
(display (quote "a"))
(newline)
(begin (display "This sentence will be interrupted")
(display "
")
(display "by an annoying newline character."))
;; kscheme の read-line 手続きの実装は、Scheme の仕様とは若干違うかも
;; C言語の readline 関数を使って実装してある
;; (define say-hello
;; (lambda ()
;; (display "Please type your name:")
;; (let ((name (read-line)))
;; (display "Nice to meet you, ")
;; (display name))))
;; (say-hello)
(quote done))
入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))
$ kscheme < sample1.scm
kscm>
"foo"
"this"
"is"
"a"
"test"
"this""is""a""test"
3
0.34e1
foo
"foo"
"a"
30.34e1foofooa
This sentence will be interrupted
by an annoying newline character.done
kscm> $ kscheme
kscm> (define print (lambda (x) (write x) (newline)))
kscm>
(define say-hello
(lambda ()
(print "Please type your name:")
(let ((name (read)))
(print "Nice to meet you, ")
(print name))))
kscm> (say-hello)
"Please type your name:"
"bob"
"Nice to meet you, "
"bob"
#<undefined>
kscm>
(define add-five
(lambda ()
(print "please enter a number:")
(let ((num (read)))
(print "When I add five I get")
(print (+ num 5)))))
kscm> (add-five)
"please enter a number:"
4
"When I add five I get"
9
#<undefined>
kscm>
(define say-hello
(lambda ()
(display "Please type your name:")
(let ((name (read-line)))
(display "Nice to meet you, ")
(display name))))
kscm> (say-hello)
Please type your name:Bob O'Malley
Nice to meet you, Bob O'Malley#<undefined>
kscm> $
0 コメント:
コメントを投稿