我正在尝试在Racket中修改此程序,以便如果此列表中不存在索引元素,则应返回#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
答案 0 :(得分:1)
只需返回#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))))))
答案 1 :(得分:0)
您可以忘记false
,而是使用尾递归。如果您尝试获取的索引长于列表的长度,则列表将为空,因此,当列表为空时,返回#lang racket
(define get-nth
(lambda (index lst)
(cond
((empty? lst) #f)
((= index 0) (car lst))
(else (get-nth (- index 1) (cdr lst))))))
。
SELECT id_sau FROM sau WHERE id_sau = ( SELECT MAX(id_sau) FROM sau)", db_con)