2015-11-26 2 views
0

Я моделирование логических выражений как LISP списки, как этот: «(NOT (AND 0 (OR BC)))
Мне нужно написать функцию, которая отображает переменные в выражении переменными являются все, кроме цифр, AND, OR. Любое тело может мне помочь? пример: выход предыдущего выражения: (BC)показывает отчетливый список конкретных атомов в списке в LISP

Вот моя попытка:

(defun print-vars (L1) 
    "Append L1 by L2." 
    (if (= 0 (list-length (L1))) 
     nil 
     (if (= 1 (list-length (L1))) 
      L1 
      (cons (print-vars (remove-duplicates (first (L1)))) 
       (print-vars (remove-duplicates (rest (L1)))))))) 
+0

Не спрашивайте ... Вопросы, которые вы не пробовали ind ответ для (показать свою работу!) –

+0

Я так много пытался с помощью удаления дубликатов и рекурсии, но это не сработало, поэтому я думаю, что моя работа - это смущение :( –

+0

Точка SO помогает, когда код не Работа. Поэтому проводка нерабочего кода является нормальной и показывает, что вы пробовали. Райнер прав, отправьте свою попытку. Кроме того, это даст нам много подсказок, чтобы мы могли помочь вам лучше, – uselpa

ответ

1

Вы могли бы сделать что-то вроде этого:

(defun vars (exp &optional (res nil)) 
    (if exp 
     (if (consp exp) 
      (vars (cdr exp) (vars (car exp) res)) 
      (if (or (numberp exp) (member exp '(and or not))) 
       res 
       (adjoin exp res))) 
     res)) 

затем

? (vars '(NOT (AND 0 (OR B C)))) 
(C B) 
? (vars '(NOT (AND C (OR B C)))) 
(B C) 
+0

спасибо, что он отлично работает :) –

+0

кажется, что вы настолько квалифицированы в lisp, мне нужно задать вам вопрос, как я могу связаться с вами? –

+0

Просто задайте свой вопрос здесь, на SO. Здесь много людей, которые могут помочь, – uselpa

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

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