2013-11-20 1 views
1

Привет всем Я новичок в программировании, и я должен работать со списком ассоциаций, как этотсогласовани ассоциативный список сюсюкать

((course (john .math) (jim .english) (carl .biology)) 
(year (john .2) (jim. 1) (carl .3)) 
(age (john .22) (jim .20) (carl .27)) 
) 

Я должен использовать сличитель работать как и с функцией поиска

(lookup 'john 'course data) and return math 

Теперь я новичок в программировании и совершенно новичок в Lisp и должен сделать это для школы. Теперь мне не нужно полное решение, но некоторые идеи или инструкции.

Это то, что у меня есть, хотя до сих пор, но мне потребовалось много времени

Если кто-то может помочь ему будет оценено !!!!

(defun lookup (name course data) 

(matches '(name course data) '(first course )) 

) 
+0

Возьмите несколько часов, чтобы читать Lisp (или Scheme) программирования книги. Мы не можем научить вас этому через несколько минут. Если вы изучаете Scheme, [SICP] (http://mitpress.mit.edu/sicp/) является обязательным для чтения (и IIRC, частично отвечает на ваш вопрос). –

ответ

4

Сначала давайте поместим данные в список под названием data. Обратите внимание, что список должен быть quoted по ', и что . dot signs должны быть окружены пробелами, потому что они имеют значения своих собственных:

(defparameter *data* '((course (john . math) (jim . english) (carl . biology)) 
         (year (john . 2) (jim . 1)  (carl . 3)) 
         (age (john . 22) (jim . 20)  (carl . 27)))) 

Теперь давайте попробуем использовать процедуру assoc:

? *data* 
((COURSE (JOHN . MATH) (JIM . ENGLISH) (CARL . BIOLOGY)) (YEAR (JOHN . 2) (JIM . 1) (CARL . 3)) (AGE (JOHN . 22) (JIM . 20) (CARL . 27))) 
? (assoc 'course *data*) 
(COURSE (JOHN . MATH) (JIM . ENGLISH) (CARL . BIOLOGY)) 
? (cdr (assoc 'course *data*)) 
((JOHN . MATH) (JIM . ENGLISH) (CARL . BIOLOGY)) 
? (assoc 'john (cdr (assoc 'course *data*))) 
(JOHN . MATH) 
? (cdr (assoc 'john (cdr (assoc 'course *data*)))) 
MATH 

поэтому функция становится

(defun lookup (name attr data) 
    (cdr (assoc name (cdr (assoc attr data))))) 

(lookup 'john 'course *data*) 
=> MATH 

(lookup 'carl 'age *data*) 
=> 27 
+1

Danke Schon uselpa – user3005313

+1

Добро пожаловать. И нет, Люксембург - не Германия (хотя мы изучаем немецкий язык в школе) ;-) – uselpa

+1

Я знаю, что Люксембург не в Германии, но я, хотя официальный язык - немецкий, как в Бельгии - французский :)) Еще раз спасибо – user3005313

 Смежные вопросы

  • Нет связанных вопросов^_^