Тема: помогите написать программку. пожалуйста

Перенесено из темы: LISP. LIB. Получение габаритов для списка объектов..
/Администратор./

[---]
Не могу написать задачу в AVTOLISP, т.к. только начала изучать, а задание уже дал преподаватель. помогите написать программку. пожалуйста.очень срочно нужно.
"Заданы 2 числовых списка, построить третий список, состоящий из тех целых чисел 1-го списка, которые имеются и во втором списке"

Re: помогите написать программку. пожалуйста

(defun F (L1 L2)
 (if L1
  ((lambda (n result)
    (cond
     ((/= (fix n) n) result)
     ((member n L2) (cons n result))
     (T result)))
   (car L1)
   (F (cdr L1) L2))))

Re: помогите написать программку. пожалуйста

попробовала программку- она у меня не идет выдает ошибку. я думала надо так-
(defun F (SP1 SP2)
   (setq SP ())
   (setq L (length SP1))
   (setq I 0)
   (repeat L
    (setq EL (nth I SP1))
    (if (and (= (type EL) 'INT) (member EL SP2)) (setq SP (cons EL SP))
    (setq I (1+I))
   )
   (reverse SP)
)
а так она у меня вообще молчит

Re: помогите написать программку. пожалуйста

можно попросить еще одну задачку (очень похожую)пожалйуста? Выручайте.где- то уменя ошибки в мелочах (наверно), но факт- не работает.  ПОМОГОТЕ  .СКОРО СЕССИЯ. ЭТО ЗАДАЧА ВАЖНЕЕ1-Й.
"Заданы 2 числовых списка построить список из элементов 1-го списка не входящих во 2-й список."
ЗАРАНЕЕ ИЗВЕНИТЕ ЗА МОЕ НЕПОНИМАНИЕ.

Re: помогите написать программку. пожалуйста

Не проверял:

(defun L_int (list1 list2 / l)
  (foreach x list1
    (if (and (= (type x) 'INT) (= (type (car (member x list2))) 'INT)) (setq l (cons x l)))
  )
  (reverse l)
)

Re: помогите написать программку. пожалуйста

P.S.: Это было по первой задаче.

Re: помогите написать программку. пожалуйста

А по второй:

(defun L_Not_Int (list1 list2 / l)
  (foreach x list1
    (if (not (member x list2)) (setq l (cons x l)))
  )
  (reverse l)
)

Извини за стиль.

Re: помогите написать программку. пожалуйста

сейчас попробую, результат сообщю
спасибо

Re: помогите написать программку. пожалуйста

по второй задаче ошибка
;***ERROR: no function definition: L

Re: помогите написать программку. пожалуйста

Код правильно переписала? Действительно используешь AutoLISP (т.е. проверяешь в среде AutoCAD)?
Проверь еще раз.

Re: помогите написать программку. пожалуйста

это перед тем как перейти в консоль? через меню

Re: помогите написать программку. пожалуйста

чувствую себя глупо, но я не знаю как ((((((

Re: помогите написать программку. пожалуйста

(defun F1 (L1 L2)
 (if L1
  ((lambda (n result)
    (cond
     ((= (type n) 'REAL) result)
     ((member n L2) (cons n result))
     (T result)))
   (car L1)
   (F1 (cdr L1) L2))))
(defun F2 (L1 L2)
 (if L1
  ((lambda (n result)
    (cond
     ((member n L2) result)
     (T (cons n result))))
   (car L1)
   (F2 (cdr L1) L2))))

Все то, что находится в данном сообщении правее лиловой вертикальной черты, следует выделить, затем поверх выделенного щелкнуть правой кнопкой мыши и выбрать из меню Копировать.
В AutoCADе следует в зоне командной строки (в нижней части окна программы) правее приглашения "Команда:"("Command:") щелкнуть правой кнопкой мыши и выбрать из меню Вставить. После этого в предпоследней строке зоны командной строки (прямо над приглашением) должна присутствовать строка "F2".
Если вместо этого последняя строка начинается с "(((_>", следует нажать клавишу Enter.
Затем введите в командной строке выражение

(F1 '(1 2 3 4 5) '(2 4 5 6))

и убедитесь, что функция (F1) возвращает список из тех элементов первого списка, которые есть и во втором, а именно (2 4 5).
Затем введите в командной строке выражение

(F1 '(1 2 3.5 4 5) '(2 4 3.5 6))

и убедитесь, что функция (F1) возвращает список из только из целочисленных элементов первого списка, которые есть и во втором, а именно (2 4).
Затем введите в командной строке выражение

(F2 '(1 2 3 4 5) '(2 4 5 6))

и убедитесь, что функция (F2) возвращает список из тех элементов первого списка, которые отсутствуют во втором, а именно (1 3).
«...она у меня не идет выдает ошибку...» - при отсутствии телепатических способностей трудно на расстоянии определить, какое именно сообщение диагностирует ошибку.
PS. Препод, начинающий учить LISPу с функции (setq) - IMHO безнадежен и подлежит списанию.

Re: помогите написать программку. пожалуйста

Теперь все поняла- все работает. Огромное спасибо. Спасли меня. А препод у нас по- правде немного того (странный).
сейчас еще бы объяснить ему все)))))))). Но я постараюсь. Еще раз спасибо. Пока.

Re: помогите написать программку. пожалуйста

Если есть (или будут) вопросы - задавайте.