2012-03-08 3 views
3

私はHTDPを通過し、最初にこのどこかを見つけた: - : しかしながらなぜこの法的(ラケット)スキームですか?

(x)はx F」(定義)以下の文章は違法定義されている理由を説明

それはラケットでうまく動作します:

> (define (f 'x) x) 
> (f 'a) 
3 
> (define a 5) 
> (f a) 
3 

明らかに、私は何かを紛失しています...正確には何ですか?

答えて

12

短い答え:あなたは完全な "#langラケット"言語を使用すべきではありません。教える言語は、あなたが直面している言語の潜在的に混乱している高度な機能を取り除きます。

この場合、定義はfという名前の関数として解釈されます。省略可能な引数はquoteで、デフォルト値は 'x'で与えられます。

言語レベルをBeginning Studentに設定すると、より合理的な回答が得られます。

+2

なぜ結果が3であるのですか? – leppie

+2

私は彼が以前の「x」の定義を3つ持っていたと思います。 –

+2

それはすごく困惑しています。 – JasonFruit

0

この行はではありません私のためにラケットで働く:(define (f 'x) x)。報告されたエラーはdefine: not an identifier for procedure argument in: (quote x)です。

あなたはどの言語を使用していますか?インタラクションウィンドウで上記の行を実行しようとしましたか?

+0

これは '#lang racket'や完全なやりとりで動作するはずです。 '#lang'はあなたが使っているものです。 –

+0

'#lang racket'の' expand:モジュール内のunbound identifier in:x'を取得しましたが、これは正しい結果です。 –

関連する問題