我正在經歷HTDP,發現這個地方的開頭: -爲什麼這是合法的(球拍)計劃?
解釋爲什麼下面的句子是非法的定義: 1.(定義(F「x)x)
然而,它可以在球拍中正常工作:
> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3
顯然,我錯過了什麼......究竟是什麼?
我正在經歷HTDP,發現這個地方的開頭: -爲什麼這是合法的(球拍)計劃?
解釋爲什麼下面的句子是非法的定義: 1.(定義(F「x)x)
然而,它可以在球拍中正常工作:
> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3
顯然,我錯過了什麼......究竟是什麼?
簡答:您不應該使用完整的「#lang racket」語言。教學語言刪除了您遇到的語言的潛在混淆高級功能。
在這種情況下,您的定義被解釋爲一個名爲f的函數,其中有一個可選的參數稱爲quote,其默認值由'x'提供。
將語言級別設置爲Beginning Student,您將得到更合理的答案。
此行確實不是在Racket中爲我工作:(define (f 'x) x)
。報告的錯誤是define: not an identifier for procedure argument in: (quote x)
。
您使用哪種語言?你是否嘗試在交互窗口中運行上述行?
這應該在'#lang racket'或完整的交互中起作用。你用的是什麼'#lang'。 – 2012-03-09 01:38:54
我在'#lang racket'中得到'expand:unbound identifier in module in:x',這似乎是正確的結果。 – 2012-04-13 05:33:57
那麼爲什麼結果是'3'? – leppie 2012-03-08 03:14:20
我猜他早就把'x'定義爲三。 – 2012-03-08 04:30:37
這真是莫名其妙。 – JasonFruit 2012-03-08 16:24:00