Определить, равна ли сумма двух первых элементов заданного списка сумме двух его последних элементов - Lisp

Узнай цену своей работы

Формулировка задачи:

Собственно,

сабж

: надо на lisp/scheme, и, желательно, как оформить это отдельно в виде макроса. Я даже не представляю что и как там обстоит, но надо без использования встроенных функций.

Решение задачи: «Определить, равна ли сумма двух первых элементов заданного списка сумме двух его последних элементов»

textual
Листинг программы
(defun task (lst &optional (n (length lst)) (c nil))
  (cond ((<= n 1) nil)
        ((= n 2) t)
        ((null (cddr lst)) (= c (+ (car lst) (cadr lst))))
        ((null c) (task lst n (+ (car lst) (cadr lst))))
        (t (task (cdr lst) n c))))

Объяснение кода листинга программы

В коде определена функция с именем task. Она принимает два аргумента: lst и n. Аргумент n является необязательным и по умолчанию равен длине списка lst. Функция проверяет условия и возвращает nil, если они не выполняются. Если длина списка n меньше или равна 1, функция возвращает nil. Если n равно 2, функция возвращает t. Если список не пустой, функция проверяет его последний элемент. Если он равен nil, значит, список имеет нечетное количество элементов, и функция возвращает nil. Если список пустой, функция вызывает саму себя, передавая в качестве аргументов lst, n и nil. Если список имеет четное количество элементов, функция проверяет сумму двух первых элементов и двух последних элементов. Если они равны, функция возвращает t, иначе nil.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.286 из 5
Похожие ответы