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


Автор: InKaterina 7.12.2010, 00:48
Извиняюсь за поздний визит, но больше нет сил.за lisp села только сегодня, что то он мне не дается. задача такая:

Определить функцию, прибавляющую заданное число к каждому элементу (на всех уровнях) указанного списка.

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

Автор: Ryukzak 7.12.2010, 08:02
(defn list-inc [lst] 
  (cond (list? lst) (map list-inc lst)
  :else (+ 1 lst))
Работает так:
Усли в шункцию подак не список - то делает предположение, что это число, и возвращается его инкремент. В случае если это список (list? lst), то ко всем его элементам (map) рекурсивно применяется функция инкремента.

Диалект - clojure, в случае scheme, если не ошибаюсь, будет так:
(defun list-inc (lst) 
  (cond ((list? lst) (map list-inc lst))
  (:t (+ 1 lst)))
Но точно не уверен.

Автор: VH_ 7.12.2010, 13:13
Код
(defun F (L N)
 (if L
  (cons
   (cond
    ((numberp (car L)) (+ (car L) N))
    ((atom (car L)) (car L))
    (T (F (car L) N)))
   (F (cdr L) N))))

Автор: InKaterina 7.12.2010, 14:20
спасибо за ответ! смысл поняла, дальше разберусь!

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