2013-04-24 54 views
2

我是一個新手,我試圖編寫一個總是找到列表的尾部第一個元素的過程。這在遞歸調用中很重要。創建一個程序,它將列表作爲參數

這裏是我的方法:

(define second (lambda (x) (car(cdr(x)))) 

,這是我如何努力,以檢查其是否運行正常與否:

>(define x (list 1 2 3 4)) 
>(second x) 

,這是錯誤:

procedure application: expected procedure, given: (1 2 3 4) (no arguments) 

=== context === 
stdin::184: second 
/usr/share/racket/collects/racket/private/misc.rkt:85:7 

可能是什麼問題?你能給我一個靈感嗎?我對「第二」的定義是錯的還是什麼?

在此先感謝。

+0

你在DrRacket中運行這個嗎?如果是這樣,您應該在發生錯誤的地區看到紅色突出顯示。你看到這個了嗎? – dyoo 2013-04-24 21:55:06

+0

不,我試圖在終端上 – user2870 2013-04-24 22:24:08

+0

如果可以,請嘗試使用DrRacket運行;當你學習語言時,它提供的額外支持應該很有用。 – dyoo 2013-04-25 03:36:32

回答

3

在代碼中有一個額外的,不必要的一對括號。這解決了它:

(define second (lambda (x) (car (cdr x)))) 

要清楚,這是錯誤的:(cdr(x))。正確的形式是:(cdr x)。請記住,無論何時您需要將函數f應用於參數x正確的方法是:(f x)

+0

非常感謝你。我真的很感激你:) – user2870 2013-04-24 21:56:22

+0

永遠是我的榮幸:) – 2013-04-24 21:58:22

0

Scheme使用S表達式,因此而不是car(x),您應該使用(car x)。在你的情況下,這意味着(car (cdr x)),而不是car(cdr(x))

相關問題