Лисп (LISP, от англ. LISt Processing — «обработка списков») — семейство языков программирования, основанных на представлении программы системой линейных списков символов, которые притом являются основной структурой данных языка. Лисп считается вторым после Fortran старейшим высокоуровневым языком программирования.
Определите функцию, которая разделит исходный список из целых чисел на два списка: список положительных чисел и список отрицательных чисел.
(defun task (lst &optional (p nil) (n nil))
((lambda (x) (and(setq first (car x))(setq last (cdr x)))) lst)
(cond ((null first) (list p n))
((> first 0) (task last (cons first p) n))
((< first 0) (task last p (cons first n)))
((= first 0) (task last p n))
)
)
Определите функцию, удаляющие в исходном списке все повторные вхождения элементов.
(defun double (lst &optional (d nil))
((lambda (x) (and(setq first (car x))(setq last (cdr x)))) lst)
(cond ((null first) (list d))
((eq (member first last) nil) (double last (cons first d)))
(t (double last d))
)
)
Определите функцию, вычисляющую скалярное произведение векторов, заданных списками целых чисел.
(defun scpr (x y)
(if (or (null x)(null y)) 0 (+ (* (car x) (car y)) (scpr (cdr x) (cdr y))))
)
Определите функцию, удаляющую из списка первое вхождение данного элемента на верхнем уровне.
(defun udal (lst a)
((lambda (x) (and(setq first (car x))(setq last (cdr x)))) lst)
(cond ((null first) lst)
((= first a) last)
(t (cons first (udal (cdr lst) a))))
)
(print(udal '(2 1 3 2 3 4) 2))
Определите функцию, удаляющую из списка каждый четный элемент.
(defun chet (lst &optional (n nil))
((lambda (x) (and(setq first (car x))(setq last (cdr x)))) lst)
(cond ((null first) (list n))
((/= (rem first 2) 0) (chet last (cons first n)))
(t (chet last n))
)
)
Определите функцию, вычисляющую, сколько всего атомов в списке.
(defun atm (lst &optional (kol 0))
((lambda (x) (and(setq first (car x))(setq last (cdr x)))) lst)
(cond ((null lst) kol)
((atom first) (atm last (+ kol 1)))
(t (atm last kol))
)
)