Почему не работает? - Lisp (229422)
Формулировка задачи:
От скуки захотелось написать функцию, которая бы изменяла(map) список последовательно с помощью данных функций.
(defun map-list-with (lst func &rest other-funcs)
(if (not (null other-funcs))
(map-this-with (mapcar func lst) (car other-funcs) (cdr other-funcs))
(mapcar func lst)))
* (map-list-with '(1 2 3 4 5) #'1+)
(2 3 4 5 6)
* (map-list-with '(1 2 3 4 5) #'1+ #'1+)
;; had to be (3 4 5 6 7)
debugger invoked on a UNDEFINED-FUNCTION in thread
#<THREAD "main thread" RUNNING {10029A49E3}>:
The function COMMON-LISP:NIL is undefined.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-KERNEL:%COERCE-CALLABLE-TO-FUN NIL)
0] 0Решение задачи: «Почему не работает?»
textual
Листинг программы
(map (compose 1+ 10*) '(1 2 3))
Объяснение кода листинга программы
Код представлен в виде списка с однородными элементами, где каждый элемент - это ассоциация с двумя элементами: название переменной и ее значение.
(map (compose 1+ 10*) '(1 2 3))compose- это функция высшего порядка, которая принимает функцию и аргументы этой функции и возвращает результат выполнения функции с аргументами.1+- это функция, которая принимает одно число и возвращает результат увеличения этого числа на 1.'(1 2 3)'- это строка, которая содержит список чисел.map- это функция, которая принимает функцию и список аргументов, и возвращает новый список, где каждый элемент - это результат выполнения функции с соответствующим аргументом.10*- это функция, которая принимает одно число и возвращает это число, умноженное на 10.- Результатом выполнения кода будет новый список, где каждое число из исходного списка будет увеличено на 1 и затем умножено на 10.
- Если вы видите ошибку в коде, возможно, она связана с неправильным использованием функций или неправильной постановкой задачи.