Увеличить каждый элемент списка (((х) (х)) ((х) (х)) …) в произвольное число раз - 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:

  1. (random-product '(((1) (2)) ((3) (4)))) Результат: ((993 1986) (2979 3972)) Каждый элемент внутреннего списка увеличен в 993 раза.
  2. (random-product '(((1) (2)) ((3) (4)))) Результат: ((174 348) (522 696)) Каждый элемент внутреннего списка увеличен в 174 раза.
  3. (random-product '(((1) (1)) ((1) (1)))) Результат: ((74 74) (74 74)) Каждый элемент внутреннего списка увеличен в 74 раза.

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


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

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

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