Это продолжение этого вопроса.
У меня есть списки или «записи», которые добавляются вместе в пустой список, каждый из которых имеет формат (Matthew (AL 21 32))
. Сейчас я пытаюсь написать функцию, которая использовала бы fetchRecord
, чтобы найти нужную запись, а затем умножить два числа внутри записи. Однако мой текущий код работает только в том случае, если я получаю имя в первой записи, но после этого он возвращает пустой список для любой записи. Вот мой код:
(define (Mult_Num name)
(cond
[(empty? db) #f]
[else (* (car(cdr(car(cdr (fetchRecord name)))))
(car(cdr(cdr(car(cdr (fetchRecord name)))))))]))
Как мне это исправить? Кроме того, если в определенной записи есть два набора данных, например: (John (AL 25 40) (CA 40 67))
, то как вы получите как 25 * 40, так и 40 * 67 и т. Д., И даже если у нее более двух наборов данных? Я понимаю, что это будет рекурсия, но не совсем уверен, как вы ее настроите.
Это моя функция fetchRecord:
(define (fetchRecord name)
(cond
[(empty? db) #f]
[(equal? (car (car db)) name) (car db)]
[else( car (car db)) name (cdr db)]))
Это также может иметь значение:
(define db '())
Также у меня есть это, но если у меня здесь больше двух имен, оно само закручивается:
(define(showRec name) ;displays everything following a name.
(cond
[(empty? db) #f]
[(equal? (car (car db)) name) (cdr (fetchRecord name))]
[else (cdr (car(fetchRecord name)))])
)
Bill_Amt
) не вызывает сама себя. - person Scott Hunter   schedule 26.09.2016