Увеличить каждый элемент списка (((х) (х)) ((х) (х)) …) в произвольное число раз - Lisp

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

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

с использованием lamda функции

Решение задачи: «Увеличить каждый элемент списка (((х) (х)) ((х) (х)) …) в произвольное число раз»

textual
Листинг программы
  1. (defun random-product (w &optional (n (random 1000)))
  2.   (mapcar #'(lambda (a) `((,(* (caar a) n)) (,(* (caadr a) n)))) w))
  3.  
  4. > (random-product '(((1) (2)) ((3) (4))))
  5. (((993) (1986)) ((2979) (3972)))
  6. > (random-product '(((1) (2)) ((3) (4))))
  7. (((174) (348)) ((522) (696)))
  8. > (random-product '(((1) (1)) ((1) (1))))
  9. (((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

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

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

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