Функции в Lisp

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

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

Здравствуйте! Нужно написать некоторые функции, а так как осень плохо разбираюсь в Lisp, то для меня это трудно. Очень нужна помощь. 1. проверить сколько элементов в списке (парное или непарное количество) 2. написать функцию, которая имеет два параметры (список и элемент). заданием функции есть сумование всех элементов списка, которые больше элемента например: (suma '( 1 2 56 3 2 7) 5) → 56+7=63 3. функция, задание которой состоит в сумирование всех элементо списка, который делятся на 3 например (f '(4 7 9 7 9 3)) → 9+9+3 4. функция, которая считает сколько раз элемент повторяется на листе 5. функция, которая сортирует список от самого большого элемента и до самого меньшего и наоборот 6. функция, которая состоит из двох параметров (два списки). Функция перемножает элементы списков парами и в результате мы получаем список из пар например (r '( 1 2 3 5) '(2 4 5 7)) →((1*2)(2*4)(3*5)(5*7)) Буду очень благодарна если кто-то поможет хоть с чем-то. Так как должна до завтра разобраться. Прошу о объяснении и использовании в коде не очень сложных функций. Спасибо огромное)

Решение задачи: «Функции в Lisp»

textual
Листинг программы
(defun counter (lst a)
  (cond ((null lst) 0)
        ((eq a (car lst)) (+ 1 (counter (cdr lst) a)))
        (t (counter (cdr lst) a))))
 
==> counter
 
(counter '(1 2 3 1 2 3 1 2 1 2) 2)
 
==> 4

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

В данном коде определена функция с именем counter. Она принимает два аргумента: lst и a. Если lst равно null, то функция возвращает 0. Если a равно car lst, то функция возвращает 1, иначе функция вызывает саму себя, передавая в качестве аргументов cdr lst и a. В примере использования функции передаётся список '(1 2 3 1 2 3 1 2 1 2) и число 2. Так как первый элемент списка равен 2, то в первый раз функция вызывается с аргументами (cdr '(1 2 3 1 2 3 1 2 1 2)) и 2. (cdr '(1 2 3 1 2 3 1 2 1 2)) равно (2 3 1 2 3 1 2 1 2), и функция возвращает 1. Во второй раз функция вызывается с аргументами (cdr (cdr '(1 2 3 1 2 3 1 2 1 2))) и 2. (cdr (cdr '(1 2 3 1 2 3 1 2 1 2))) равно (3 1 2 3 1 2 1 2), и функция возвращает 1. В третий раз функция вызывается с аргументами (cdr (cdr (cdr '(1 2 3 1 2 3 1 2 1 2)))) и 2. (cdr (cdr (cdr '(1 2 3 1 2 3 1 2 1 2)))) равно (null '(1 2 3 1 2 3 1 2 1 2)), и функция возвращает 0. В итоге функция counter возвращает 4.

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


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

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

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