Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Помогите с рекурсивной функцией


Автор: Katran7 12.11.2010, 00:06
Доброго всем времени суток. Помогите пожалуйста с решением такой задачки: необходимо написать  рекурсивную функцию YintoX, которая любое S-выражение преобразует в новое, в котором все атомы отличные от NIL были бы заменены переменной X. 

Например, (YintoX ‘(A (B . C) X Y NIL Z)) ------> (X (X . X) X X NIL X)

Заранее спасибо.

Автор: VH_ 12.11.2010, 08:23
Код
(defun YintoX (S)
 (cond
  ((null S) nil)
  ((atom S) (quote X))
  (T
   (cons
    (YintoX (car S))
    (YintoX (cdr S))))))

Обращаю Ваше внимание на то, что символ '(апостроф) - это сокращенная запись вызова формы (quote), а символ `(обратный апостроф) - сокращенная запись вызова <совсем другой> формы (backquote).

Автор: Katran7 18.11.2010, 20:54
Огромное спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)