2016-10-25 3 views
0

Так недавно я узнал рекурсивную функцию, и я пробую какое-то упражнение, тогда я просто застрял.Застревает при записи функции рекурсии в языке начинающих ракетки?

Вопрос список-п-й элемент, который потребляет список, (LST), и натуральное число (п), и производит п-й элемент в LST, если существует, в противном случае функция производит ложной. Примечание , что первый элемент в индекс 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 

, таким образом, я знаю, что не является правильной рекурсией, а также при п = 0 она должна производить первые номер в списке (list-nth-item (list 1 2 3)0) должен указывать 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 функции.

 Смежные вопросы

  • Нет связанных вопросов^_^