我正在尝试在球拍中修改此程序,以便如果此列表中没有索引元素,则应返回#f
。一些指导很有帮助。预先感谢
#lang racket
(define get-nth
(lambda (index lst)
(let loop ((index index) (my-list lst))
(cond ((null? my-list) lst)
((= index 0) (car my-list))
(else (loop (- index 1) (cdr my-list)))))))
(get-nth 4 '(a b))
;#f
只需返回 #f
而不是列表...
(define get-nth
(lambda (index lst)
(let loop ((index index) (my-list lst))
(cond ((null? my-list) #f)
((= index 0) (car my-list))
(else (loop (- index 1) (cdr my-list)))))))
因为现在我们不必"记住"原始输入列表,所以我们可以简化事物并消除命名的 let
,例如:
(define get-nth
(lambda (index lst)
(cond ((null? lst) #f)
((= index 0) (car lst))
(else (get-nth (- index 1) (cdr lst))))))
您可以忘记let loop
,而是使用尾部回复。如果您试图比列表的Lenght更长的索引,则列表将是空的,因此,当列表为空时,返回false
。
#lang racket
(define get-nth
(lambda (index lst)
(cond
((empty? lst) #f)
((= index 0) (car lst))
(else (get-nth (- index 1) (cdr lst))))))