如果不存在索引元素,则会生成球拍列表

时间:2015-05-07 21:27:39

标签: racket

我正在尝试在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

2 个答案:

答案 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)