Функция для проверки одинаковых атомов - Lisp
Формулировка задачи:
Открыла впервые Lisp и понятия не имею,как можно реализовать задачу.Подскажите,пожалуйста
Задача:
Написать функцию,которая проверяет одинаковые ли атомы расположенные в двух S-выражениях на соответствующих местах.
Решение задачи: «Функция для проверки одинаковых атомов»
textual
Листинг программы
- (defun *equalp (x1 x2)
- (cond ((or (atom x1) (atom x2)) (eq x1 x2))
- (t (and (*equalp (car x1) (car x2)) (*equalp (cdr x1) (cdr x2))))))
- ==> *equalp
- (*equalp '(1 2 3) '(1 2 3))
- ==> T
- (*equalp '(1 2 3) '(1 2))
- ==> NIL
- (*equalp '(1 2 3) '(1 (2) 3))
- ==> NIL
- (*equalp '(1 (2) 3) '(1 (2) 3))
- ==> T
- (*equalp '(1 ((2) 3)) '(1 ((2) 3)))
- ==> T
Объяснение кода листинга программы
В коде определена функция equalp для проверки одинаковых атомов. Функция equalp принимает два аргумента x1 и x2. Если оба аргумента являются атомами и равны друг другу, то возвращается значение T (истина). Если оба аргумента не являются атомами, то рекурсивно вызывается функция equalp для их кар и цик. Если хотя бы один из аргументов является атомом или если хотя бы одна из пар равных аргументов не является атомом, то возвращается значение NIL (ложь). Примеры вызовов функции equalp:
- (*equalp '(1 2 3) '(1 2 3)) -> T
- (*equalp '(1 2 3) '(1 2)) -> NIL
- (*equalp '(1 2 3) '(1 (2) 3)) -> NIL
- (*equalp '(1 (2) 3) '(1 (2) 3)) -> T
- (*equalp '(1 ((2) 3)) '(1 ((2) 3))) -> T
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д