Реализовать с применением функционалов и лямбда-выражений следующую функцию - Lisp

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

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

Здравстуйте, помогите решить задачку: "Реализовать с применением функционалов и лямбда-выражений следующую функцию: для исходного сложного числового списка, построить список, состоящий из элементов исходного списка, отрицательные числа в котором заменены 0." Результат ожидается такого вида: > (positive_list '(1 ((-2 3) -4) 5 (6))) (1 ((0 3) 0) 5 (6)) Заранее спасибо!

Решение задачи: «Реализовать с применением функционалов и лямбда-выражений следующую функцию»

textual
Листинг программы
(defun task (lst)
  (mapcar #'(lambda (x) 
    (cond ((listp x) (task x))
          ((plusp x) x)
          (t 0))) lst))
 
==> task
 
(task '(1 ((-2 3) -4) 5 (6)))
 
==> (1 ((0 3) 0) 5 (6))

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

В коде определена функция с именем task. Она принимает один аргумент lst. Внутри функции используется функция mapcar, которая применяет к каждому элементу списка lst анонимную функцию. Эта анонимная функция принимает один аргумент x и возвращает результат выполнения условного выражения в функции cond. Условное выражение в функции cond проверяет три условия:

  1. Если элемент x является списком, то рекурсивно вызывается функция task для этого элемента.
  2. Если элемент x больше нуля, то возвращается сам элемент.
  3. В противном случае возвращается ноль. Таким образом, результатом работы функции task для списка '(1 ((-2 3) — 4) 5 (6)) будет список (1 ((0 3) 0) 5 (6)).

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


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

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

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