我試圖編寫一個簡單的計劃函數,返回列表的最後一個元素。我的功能看起來像它應該工作,但是我設法失敗的東西:計劃獲得列表中的最後一個元素
(define (last_element l)(
(cond (null? (cdr l)) (car l))
(last_element (cdr l))
))
(last_element '(1 2 3)) should return 3
DrRacket不斷給我的錯誤:
mcdr: contract violation
expected: mpair?
given:()
由於(null? '())
是真的,我不知道爲什麼這個不起作用。
這是一個函數,我認爲我需要做一個家庭作業(編寫函數last-element
不是作業),並且說明中說我不能使用內置函數reverse
,所以我不能只是做(car (reverse l))
如何修復此功能?
如果你的函數通過空列表會發生什麼?當然,你的講師可能不在意。他或她是否會說出關於數據的假設?對於家庭作業的作業,我認爲可以合理的打折非列表數據,但空列表在列表上下文中是合理的。事實上,有一個簡單的方法來處理它,也可以合理處理其他非列表數據... – itsbruce