Common Lisp/Визначення Функцій в Ліспі/Відповіді

Common Lisp/Визначення Функцій в Ліспі:

1. a) $ (DEFUN F1 (lst)б) $ (DEFUN F2 (lst)

(CADDR (CADDDR lst))) ) (CAADR lst) )

в) $ (DEFUN FATOM (lst)г) $ (DEFUN LAST (lst)

((ATOM (CAR lst) (CAR lst)) ((CDR lst) (LAST (CDR lst)))

(FATOM (CAR lst)) ) (CAR lst) )

д) $ (DEFUN FLAST (lst)е) $ (DEFUN IN (obj lst)

((ATOM lst) lst) ((NULL lst) NIL)

((CDR lst) (FLAST (CDR lst))) ((EQL obj (CAR lst)) T)

(FLAST (CAR lst)) ) (IN obj (CDR lst)) )


2. $ (DEFUN rev (lst1 lst2)

((NULL lst1) lst2)

(PUSH (POP lst1) lst2)

(REV lst1 lst2) )

3. а) $ (DEFUN NO-DOUBLES(lst)

(NULL lst) NIL)

(CONS (CAR lst) (NO-DOUBLES (REMBER-ALL (CAR lst) lst))) )

б) $ (DEFUN UNION (lst1 lst2)

(NO-DOUBLES (APPEND lst1 lst2)) )

в) $ (DEFIN MINUS (lst1 lst2)

((NULL lst2) lst1)

(MINUS (REMBER (CAR lst2) lst1) (CDR lst2)) )

г) $ (DEFUN INTERSECT (lst1 lst2)

((NULL lst1) NIL)

((IN (CAR lst1) lst2) (CONS (CAR lst1) (INTERSECT (CDR lst1) lst2)))

(INTERSECT (CDR lst1) lst2) )


II Варіант завдань

ред.

а) (DEFUN REVERSE_ALL (lst)

((NULL lst) NIL)

((ATOM (CAR lst)) (APPEND (REVERSE_ALL (CDR lst)) (CONS (CAR lst))))

(APPEND (REVERSE_ALL (CDR lst)) (CONS (REVERSE_ALL (CAR lst)))) )


б) (DEFUN find_neighbours (lst node)

((NULL lst) NIL)

((EQL (CAAR lst) node) (CONS (CADAR lst) (find_neighbours (CDR lst) node)))

((EQL (CADAR lst) node) (CONS (CAAR lst) (find_neighbours (CDR lst) node)))

(find_neighbours (CDR lst) node) )


в)

(DEFUN liner (lst)
((NULL lst) NIL)
((LISTP (CAR lst)) (APPEND (liner (CAR lst)) (liner (CDR lst))))
(CONS (CAR lst) (liner (CDR lst))) )


г) (DEFUN symdiff (lst1 lst2)

(UNION (minus lst1 lst2) (minus lst2 lst1)) )