2015-10-28 64 views
2

在這樣的代碼爲什麼我不能在DrRacket中使用方括號?

(define (lookup key t) 
    (let ([result (assoc ket (vector-ref t 0))]) 
     (and result (cdr result)))) 

我不能使用方括號,該錯誤是一個非法使用方括號。我怎麼解決這個問題? 對不起,這樣一個愚蠢的問題。

回答

5

確保「確定從源語言」被選擇(在列表底部左窗口),並在你的代碼的開頭加入這一行:

#lang racket 
+0

謝謝,它適用於球拍語言模式。但是爲什麼它在R5RS中不起作用呢? – AqShvartz

+1

@AqShvartz R5RS模式嚴格執行R5RS方案標準。而且,標準計劃不允許使用方括號作爲圓括號的替代。這是設計。 –

2

在一些R5RS Scheme(以及其他類型的Lisp,如Common Lisp)中,方括號不用於括號的替代(例如,請參見this for Scheme,特別是對問題的回答:「使用方括號而不使用括號是否合法?」)。

對於這些語言,你可以使用普通的括號:

(define (lookup key t) 
    (let ((result (assoc ket (vector-ref t 0)))) 
     (and result (cdr result)))) 

注意,這個語法也被允許在球拍和所有接受方括號中的其他語言。

+1

這是不正確的:[R6RS](http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-7.html#node_sec_4.3)使方括號成爲標準的一部分。作爲括號的別名,甚至許多R5RS和R7RS方案也接受方括號,甚至(shockhorror!)大括號作爲非標準擴展名。 – sjamaan

+0

謝謝,糾正了答案。 – Renzo

相關問題