我有要求使用遞歸過程返回列表中的最後一個負數。現在我有一個遞歸過程返回列表中的所有負數。如何使用方案去除列表中的最後一個元素
(define returnLastNeg
(lambda (lst)
(if (null? lst)
'()
(if (positive? (car lst))
(returnLastNeg (cdr lst))
(cons (car lst) (returnLastNeg (cdr lst)))))))
與(returnLastNeg'(1 -2 -3 4 -5 6))
回報
輸出:
'(-2 -3 -5)
我需要它來只返回-5
雖然。我試圖修改我的程序來檢查列表中最後一個元素是否爲正值。如果是,我想刪除最後一個元素,然後再次調用該過程。但是,當我這樣做,我得到一個錯誤(如下圖)
修改過程:
(define returnLastNeg-modified
(lambda (lst)
(if (null? lst)
'()
(if (positive? (last lst))
(remove (last lst) (lst))
(cons (car lst) (returnLastNeg-modified (cdr lst)))))))
錯誤:
application: not a procedure;
expected a procedure that can be applied to arguments
given: '(1 -2 -3 4 -5 6)
arguments...: [none]
>
鑑於您似乎在使用Racket,您可以隨時使用['drop-right'](http://docs.racket-lang.org/reference/pairs.html#%28def._%28% 28lib._racket%2Flist..rkt%29._drop-right%29%29)from'racket/list'。 –
@AlexisKing給了我同樣的錯誤 – mdo123
如果'lst'是一個列表,所以'(last lst)'工作如何是一個悖論,你在你的代碼中除了清晰的參數列表外還有'(lst)'似乎試圖運行'lst'就好像它對一個過程進行了評估。 'lst'不能既是一個程序又是一個列表,所以他們中的一個將會失敗。 – Sylwester