アカウント名:
パスワード:
LISPの美しさは、 シンタクスでは無くセマンティクス [sampou.org] だと思うのですが。
LISPにはシンタクスは無いに等しいです。なにしろ、通常の言語ならコンパイラが生成する構文木を、S式という二分木でそのまま書き下しているだけなのですから。プログラマがコンパイラの代わりをするのですね。
それに対してLISPのセマンティクスは、きわめて洗練された美しいものです。特にSchemeは、関数もブロックも制御構造も、全てがラムダ関数という一つの実体の側面として実現されています。言わば、Schemeの全てのシンタクスは、ラムダ式の構文糖衣にすぎないのです。
LISPのシンタクスは単純ですから、とりあえず書けるようになるための敷居は非常に低いのですが、その奥には驚くべき豊穣な世界が広がっています。本当に、全てのプログラマに垣間見てほしい世界です。
あ、またやっちゃったか、すみません。「Schemeのシンタクスの大部分は、ラムダ式の構文糖衣」と訂正しておきます。
ところで、 R5RS (Revised^5 Report on Algorithmic Language Scheme) 日本語訳 [unixuser.org]を読んでいるのですが、恥ずかしながら(begin EXP1 EXP2 ...) と ((la
ありがとうございました。 ここ [schemers.org] の原版も読んでみます。
それにしても、 (begin (define x 1) (+ x 1)) これがR5RSで間違いとは、驚きです。
取り急ぎで失礼します。
トップレベル以外のbeginに定義と式を混在できないなら、
((lambda () (begin (define x 1) (+ x 1))))
これはエラーになるべきなのでしょうか? Windows版のGauche、MzScheme、Chez Scheme では、いずれも「2」が返って来るのですが。
ありがとうございました。もっともっと勉強します。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike
行きたいが・・・ (スコア:1)
関西でやってくれれば、万難を排して参加するのだが。本当に。
LISP って、一番美しい言語だと思ふ。
Re:行きたいが・・・ (スコア:-1, フレームのもと)
シンタックスに惑わされるバカ発見。
シンタクスとセマンティクス (スコア:1, すばらしい洞察)
LISPの美しさは、 シンタクスでは無くセマンティクス [sampou.org] だと思うのですが。
LISPにはシンタクスは無いに等しいです。なにしろ、通常の言語ならコンパイラが生成する構文木を、S式という二分木でそのまま書き下しているだけなのですから。プログラマがコンパイラの代わりをするのですね。
それに対してLISPのセマンティクスは、きわめて洗練された美しいものです。特にSchemeは、関数もブロックも制御構造も、全てがラムダ関数という一つの実体の側面として実現されています。言わば、Schemeの全てのシンタクスは、ラムダ式の構文糖衣にすぎないのです。
LISPのシンタクスは単純ですから、とりあえず書けるようになるための敷居は非常に低いのですが、その奥には驚くべき豊穣な世界が広がっています。本当に、全てのプログラマに垣間見てほしい世界です。
Re:シンタクスとセマンティクス (スコア:0)
そんなことないでしょ。
例えば (begin EXP1 EXP2 ...) が ((lambda () EXP1 EXP2 ...)) の syntax sugar だと思うなら R5RS を読み直すことをお勧めします。
Re:シンタクスとセマンティクス (スコア:0)
あ、またやっちゃったか、すみません。「Schemeのシンタクスの大部分は、ラムダ式の構文糖衣」と訂正しておきます。
ところで、 R5RS (Revised^5 Report on Algorithmic Language Scheme) 日本語訳 [unixuser.org]を読んでいるのですが、恥ずかしながら(begin EXP1 EXP2 ...) と ((la
Re:シンタクスとセマンティクス (スコア:0)
> (begin EXP1 EXP2 ...) と ((lambda () EXP1 EXP2 ...))の違いが分かりません。
> どのページのあたりに記述があるか、よろしかったら教えていただけないでしょうか?
7.1.3節および7.1.6節。
beginは
(begin <sequence>)
(begin <definition>*)
で、
<sequence> := <command>* <expression>
<command> := <expression>
lambdaは
(lambda <formals> <body>)
で、
<body> := <definition>
Re:シンタクスとセマンティクス (スコア:0)
ありがとうございました。 ここ [schemers.org] の原版も読んでみます。
それにしても、
(begin
(define x 1)
(+ x 1))
これがR5RSで間違いとは、驚きです。
取り急ぎで失礼します。
Re:シンタクスとセマンティクス (スコア:0)
<command> --> <expression>
<command or definition> --> <command>
| <definition>
| <syntax definition>
| (begin <command or definition>+)
だから top level の begin は定義と式を混在できるよ。
その場
これって間違い? (スコア:0)
トップレベル以外のbeginに定義と式を混在できないなら、
((lambda ()
(begin
(define x 1)
(+ x 1))))
これはエラーになるべきなのでしょうか?
Windows版のGauche、MzScheme、Chez Scheme では、いずれも「2」が返って来るのですが。
Re:これって間違い? (スコア:0)
ちなみに Gauche、MzScheme 等では
(let ((x 1))
(begin (define x 2) x)
x)
=> 2
となり、internal define ができるわけじゃないので注意。
Re:これって間違い? (スコア:0)
ありがとうございました。もっともっと勉強します。