Функции в 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
Листинг программы
  1. (defun counter (lst a)
  2.   (cond ((null lst) 0)
  3.         ((eq a (car lst)) (+ 1 (counter (cdr lst) a)))
  4.         (t (counter (cdr lst) a))))
  5.  
  6. ==> counter
  7.  
  8. (counter '(1 2 3 1 2 3 1 2 1 2) 2)
  9.  
  10. ==> 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы