简单的方案问题

发布于 2024-11-09 02:10:45 字数 403 浏览 0 评论 0原文

我如何从给定的数据库中找到列表? 数据库:

(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)

谢谢

how can I find a list from given database??
Database:

(10 math phys)

(11 math chem)

(13 bio chem)

(15 geo phys)

I want to implement time which shows the first and second exams in a list.

>(time ’10)

(list ‘math ‘phys)

>(time ’19)

empty

And I want to implement secondExams which returns the time of second exams.

>(secondExams ‘phys)

(list ‘10 ’15)

>(secondExams ‘chem)

(list ’11 ’13)

thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

残月升风 2024-11-16 02:10:45

首先,让我们澄清一下您的数据库格式。使其成为列表的列表:

(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))

然后我们可以为 secondaryExams 做一些非常类似的事情。只不过这次我们将递归地构建一个匹配列表。

(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))

我还没有测试过这段代码,但我很确定它对你有用。

First, let's clarify your database format. Make it a list of lists:

(define database
  '((10 math phys)
    (11 math chem)
    (13 bio chem)
    (15 geo phys)))

Then time just needs to step through your list recursively, and compare the first element of the sub-list with your target value. If we find no matching value, we'll return the empty list. We'll do this in a helper procedure to match the functionality you're precisely seeking.

(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))

Then we can do something very similar for secondExams. Except we'll recursively build a list of matches this time.

(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))

I haven't tested this code, but I'm pretty sure it'll work for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文