Увеличить каждый элемент списка (((х) (х)) ((х) (х)) …) в произвольное число раз - Lisp
Формулировка задачи:
с использованием lamda функции
Решение задачи: «Увеличить каждый элемент списка (((х) (х)) ((х) (х)) …) в произвольное число раз»
textual
Листинг программы
(defun random-product (w &optional (n (random 1000))) (mapcar #'(lambda (a) `((,(* (caar a) n)) (,(* (caadr a) n)))) w)) > (random-product '(((1) (2)) ((3) (4)))) (((993) (1986)) ((2979) (3972))) > (random-product '(((1) (2)) ((3) (4)))) (((174) (348)) ((522) (696))) > (random-product '(((1) (1)) ((1) (1)))) (((74) (74)) ((74) (74)))
Объяснение кода листинга программы
В коде определён пользовательский функтор random-product. Он принимает два аргумента: w (список списков) и n (произвольное число). Если n не задано, то оно инициализируется случайным числом от 0 до 1000. Функция random-product применяет к каждому элементу списка w (который является списком списков) функцию #'(lambda (a) `((,( (caar a) n)) (,( (caadr a) n))), которая увеличивает каждый элемент внутреннего списка в n раз. Обратите внимание, что в этой функции используется mapcar, а не for. Это связано с тем, что for в Common Lisp не поддерживает замыкания. Примеры использования функции random-product:
- (random-product '(((1) (2)) ((3) (4)))) Результат: ((993 1986) (2979 3972)) Каждый элемент внутреннего списка увеличен в 993 раза.
- (random-product '(((1) (2)) ((3) (4)))) Результат: ((174 348) (522 696)) Каждый элемент внутреннего списка увеличен в 174 раза.
- (random-product '(((1) (1)) ((1) (1)))) Результат: ((74 74) (74 74)) Каждый элемент внутреннего списка увеличен в 74 раза.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д