过程find-last采用1个参数和列表的谓词,并返回满足谓词的列表中最右边的元素。如果不存在此类元素,请返回#f
(define (find-last-helper ans)
(if (predicate? ans)
(add1 ans)))
(define find-last
(lambda (predicate? ls)
(cond
[(null? ls) #f]
[(equal? predicate? (car ls)) car ls]
[else(find-last-helper(find-last ls(cdr ls)))])))
我在帮手或找到最后一个程序中遗漏了什么? 它返回语法错误。
答案 0 :(得分:1)
谓词?。解决这个问题的方法是在 find-last 的lambda块中移动 find-last-helper 的定义,或者在 find中添加一个额外的参数-last-helper ,以便谓词?可以传递给它。
我会推荐前者;假设(来自名称) find-last-helper 仅对 find-last 有用,它会使外部环境更加清洁。
注意:假设你修复了错误但保留了基本结构,你的函数将返回最左边的匹配 - 它找到的第一个匹配 - 而不是最右边的匹配。为了清楚地看到这一点,假设列表中最左边的项满足谓词并逐步执行代码;应该很清楚,第三个递归的 cond 行没有被执行。