2013-10-13 132 views
0

我正在學習計劃小模擬程序並且遇到了一個奇怪的麻煩。 這裏是我的代碼:計劃if語句

(define rember 
    (lambda (a lat) 
    ((if (null? lat) 
     '() 
     (cond 
      ((eq? a (car lat)) (cdr lat)) 
      (else (rember a (cdr lat)))))))) 

(rember 'aaa '(bbb aaa)) 

我在教科書中使用的「如果」,而不是「電導率」。當從尾遞歸返回時,它顯示了這個錯誤:

application: not a procedure; 
expected a procedure that can be applied to arguments 
    given: '() 
    arguments...: [none] 

我想這是因爲它把「()在if語句的功能和尾遞歸作爲其參數的返回值。但是由於這本書沒有給我這麼多關於該語言的細節,你能否爲我解釋一下這一點? (例如,這實際上是某種語言功能嗎?在這段代碼中,我可以堅持使用「if」嗎?何時可以安全地使用「if」?)

謝謝。

+0

[球拍PLAI應用程序不是一個程序]可能的副本(http://stackoverflow.com/questions/19022704/racket-plai-application-not-a-procedure) –

+0

感謝您的提醒。我曾搜索過它,但很難找出相關性,因爲我是一個剛剛開始的新手:)。 – babel92

+0

通常,由於最好的做法是在問題中包含完整的錯誤信息,用引號搜索錯誤信息將幫助您找到它(因爲較早的用戶,假設他們遵循了慣例)將會將其包含在他們的問題中。 –

回答

6

你有一個額外的圓括號你的if。這

((if (null? lat) 
    '() 
     (cond 
     ((eq? a (car lat)) (cdr lat)) 
     (else (rember a (cdr lat)))))) 

應該是這樣的:

(if (null? lat) 
    '() 
    (cond 
     ((eq? a (car lat)) (cdr lat)) 
     (else (rember a (cdr lat))))) 

這些額外的括號告訴你要撥打的,如果喜歡的功能,所以你的錯誤說「()」不是個結果計劃功能。

+0

非常感謝!這確實解決了我的問題! – babel92