2012-03-08 58 views
3

我正在經歷HTDP,發現這個地方的開頭: -爲什麼這是合法的(球拍)計劃?

解釋爲什麼下面的句子是非法的定義: 1.(定義(F「x)x)

然而,它可以在球拍中正常工作:

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

顯然,我錯過了什麼......究竟是什麼?

回答

12

簡答:您不應該使用完整的「#lang racket」語言。教學語言刪除了您遇到的語言的潛在混淆高級功能。

在這種情況下,您的定義被解釋爲一個名爲f的函數,其中有一個可選的參數稱爲quote,其默認值由'x'提供。

將語言級別設置爲Beginning Student,您將得到更合理的答案。

+2

那麼爲什麼結果是'3'? – leppie 2012-03-08 03:14:20

+2

我猜他早就把'x'定義爲三。 – 2012-03-08 04:30:37

+2

這真是莫名其妙。 – JasonFruit 2012-03-08 16:24:00

0

此行確實不是在Racket中爲我工作:(define (f 'x) x)。報告的錯誤是define: not an identifier for procedure argument in: (quote x)

您使用哪種語言?你是否嘗試在交互窗口中運行上述行?

+0

這應該在'#lang racket'或完整的交互中起作用。你用的是什麼'#lang'。 – 2012-03-09 01:38:54

+0

我在'#lang racket'中得到'expand:unbound identifier in module in:x',這似乎是正確的結果。 – 2012-04-13 05:33:57