如何从给定的数据库中找到列表? 数据库:
(10 math phys)
(11 math chem)
(13 bio chem)
(15 geo phys)
我想实现time
,它会在列表中显示第一和第二个考试。
>(time ’10)
(list ‘math ‘phys)
>(time ’19)
empty
我想实现secondExams
,它会返回第二次考试的时间。
>(secondExams ‘phys)
(list ‘10 ’15)
>(secondExams ‘chem)
(list ’11 ’13)
谢谢
答案 0 :(得分:2)
首先,让我们澄清一下您的数据库格式。将其列为清单:
(define database
'((10 math phys)
(11 math chem)
(13 bio chem)
(15 geo phys)))
然后 time 只需递归地遍历列表,并将子列表的第一个元素与目标值进行比较。如果我们找不到匹配的值,我们将返回空列表。我们将在帮助程序中执行此操作,以匹配您正在寻求的功能。
(define time-ish
(lambda (target lst)
(cond ((null? lst) lst)
((eq? target (caar lst)) (cdar lst))
(else
(time-ish target (cdr lst))))))
(define (time lookin-for)
(time-ish lookin-for database))
然后我们可以为secondExams做一些非常类似的事情。除了我们这次递归地建立一个匹配列表。
(define exam-helper
(lambda (target lst)
(cond ((null? lst) lst)
((eq? target (third (car lst))) (cons (first (car lst))
(exam-helper target (cdr lst))))
(else
(exam-helper target (cdr lst))))))
(define (secondExams lookin-for)
(exam-helper lookin-for database))
我没有测试过这段代码,但我很确定它对你有用。