простой вопрос схемы - PullRequest
2 голосов
/ 21 мая 2011

как мне найти список из заданной базы данных ?? База данных:

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

спасибо

1 Ответ

2 голосов
/ 23 мая 2011

Во-первых, давайте уточним формат вашей базы данных.Составьте список списков:

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

Я не тестировал этот код, но я уверен, что он будет работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...