0

所以最近我学习了递归函数,我正在尝试一些练习然后我就卡住了。

问题是 list-nth-item,它使用一个列表 (lst) 和一个自然数 (n),如果存在,则生成 lst 中的第 n 个元素,否则该函数生成 false。请注意,第一项在索引 0 中。例如:(list-nth-item (list 1 2 3) 0)产生1

这是我的代码

     ;;list-nth-item consumes list and a natural number
     ;;and produces the n-th element in the list or false
     ;;list-nth-item: List Nat -> (Anyof Any false)
    (define (list-nth-item lst n)
          (cond
            [(empty? lst)false]
            [(= n 0)(first lst)]
            [else ????]))


         (list-nth-item (list 1 2 3)2)--> should produce 3

我知道因此不是正确的递归,当 n = 0 时它应该在列表示例中产生第一个数字(list-nth-item (list 1 2 3)0)应该给出1. 我对此并不陌生,只是不知道如何形成递归。

4

1 回答 1

1

将列表视为传送带:您检查是否到达您的项目(使用第一个案例(= n 0)),如果不是(else案例),您只需通过获取列表尾部(使用cdr函数)并再次重复该过程来移动传送带。

这可以像下面这样完成:

(define (list-nth-item lst n)
  (cond
    [(empty? lst) #f]
    [(zero? n) (car lst)]
    [else (list-nth-item     ; <-- repeats the process
           (cdr lst)         ; <-- shifts the "belt"
           (sub1 n))]))      ; <-- updates the number of steps to go

PS:这已经通过list-ref功能完成了。

于 2016-10-25T06:43:22.020 回答