Функция для проверки одинаковых атомов - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д