scheme - 返回给定值和给定列表的前任
问题描述
我熟悉递归过程,但不知何故我无法解决这个问题:我想返回给定列表的前任值。
(define (pred value lst)
...)
(pred 3 (list 8 3 7 3)) should return 8
(pred 2 (list 1 2 2 2 2)) should return 1
请注意,我只想返回前任的“第一次”出现,因此在第一个示例中,不必返回数字 7。
我目前被卡住了,因为我“丢失了关于前任值的信息”,一旦我通过 (pred value (rest lst)) 调用递归......我不知道将这些信息“存储”在例如列表中。
谢谢你的帮助!我已经尝试了几个小时...
解决方案
所以这里是如何解决这个问题。您制作了一个带有附加参数的助手。其中之一可以是前一个元素。例如。
(define (iterate-pred value last lst)
...)
(pred 3 '(1 2 3 4)) ; ==>
(iterate-pred 3 1 '(2 3 4)) ; ==>
(iterate-pred 3 2 '(3 4)) ; ==>
; ==> 2
因此,要更新变量,您只需使用新值再次调用相同的过程。这就像迭代列表一样简单,它使用相同的策略。
define
您可以使用/letrec
或使用 named 将这些实现为内部过程let
。然后您可以在帮助程序中省略value
,因为您可以通过范围访问它。
祝你好运!