首页 > 解决方案 > 返回给定值和给定列表的前任

问题描述

我熟悉递归过程,但不知何故我无法解决这个问题:我想返回给定列表的前任值。

(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)) 调用递归......我不知道将这些信息“存储”在例如列表中。

谢谢你的帮助!我已经尝试了几个小时...

标签: schemelispracket

解决方案


所以这里是如何解决这个问题。您制作了一个带有附加参数的助手。其中之一可以是前一个元素。例如。

(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,因为您可以通过范围访问它。

祝你好运!


推荐阅读