Создать функционал\макрос аналогичный функции FUNCALL - Lisp

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

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

Здравствуйте! Помогите пожалуйста в решении задачи: Необходимо создать функционал\макрос аналогичный функции FUNCALL, заменив FUNCALL русским словом.

Решение задачи: «Создать функционал\макрос аналогичный функции FUNCALL»

textual
Листинг программы
(defmacro вызов (fnam  &rest arglist)
 `(,fnam ,@arglist))
 
==> вызов
 
(вызов + 1 2 3 4)
 
==> 10
 
(вызов sin (* 0.5 _pi))
 
==> 1.0

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

В данном коде определен макрос вызов, который аналогичен функции funcall. Макрос вызов принимает два аргумента: fname (имя функции) и arglist (список аргументов). Список аргументов arglist обрабатывается специальным образом: с помощью символа &rest arglist. Это означает, что все аргументы, перечисленные после &rest, будут собраны в список и переданы в функцию, имя которой указано в первом аргументе (fname). Функция funcall принимает два аргумента: имя функции и список аргументов. Она вызывает функцию с указанным именем, передавая ей указанный список аргументов. Таким образом, макрос вызов можно использовать вместо функции funcall. Например, если мы вызываем функцию + с аргументами 1, 2, 3, 4, то мы можем использовать макрос вызов следующим образом: (вызов + 1 2 3 4). Это приведет к тому же результату, что и вызов функции funcall с теми же аргументами и именем функции +. В данном случае, когда мы вызываем макрос вызов с аргументами (1, 2, 3, 4), он передает эти аргументы функции +, и результатом будет число 10. Аналогично, когда мы вызываем макрос вызов с аргументами (sin, (* 0.5 _pi)), он передает эти аргументы функции sin, и результатом будет число 1.0.

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


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

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

9   голосов , оценка 4 из 5