1
我需要制作一个递归函数,该函数需要一个对象和一个向量,并返回在我的对象参数之前的所有对象的列表。Scheme中的递归函数
我把它用迭代这样做的:
(define (precedes obj vec)
(do ((i 1 (+ i 1))
(list '() (if (eqv? obj (vector-ref vec i))
(cons(vector-ref vec (- i 1)) list)
list)))
((= i (vector-length vec)) list))
)
但我有很多的麻烦试图找出如何使用递归做同样的事情。我很困惑,我如何通过递归调用来继续增加矢量。到目前为止,我已经是这样的:
(define (precedes2 obj vec)
(define list '())
(if (eqv? obj (vector-ref vec i))
(cons(vector-ref vec(- i 1)) list)
list)))
我想我会用我的if语句名词前用同样的逻辑,但我不知道现在该怎么用更新的调用同一个函数向量。任何帮助都会很棒。
感谢您对逻辑的细节也是如此。真的帮助我更好地理解语言。仅在2周前开始在Scheme中开始编码。 – Ganda
@Ganda正如我在开头提到的那样,这是一个非常有趣的例子,因为编写递归版本通常更容易,然后(在Common Lisp中,它不一定有尾部调用消除)使用do编写一个版本。我认为,走向另一个方向是不常见的。 –