Новая синтаксическая форма с макросами и функционалами - Lisp

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

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

Здравствуйте! Помогите пожалуйста, в лиспе недавно, а задание сделать нужно Я использую HomeLisp. Вот собственно задание: С помощью функционалов и (или) макросов создать новую синтаксическую форму: (ЕСЛИ выражение-число (выражение при число>0) (выражение1) (выражение2) … (выражениеN)) выражения 1-N исполняются при число<0

Решение задачи: «Новая синтаксическая форма с макросами и функционалами»

textual
Листинг программы
  1. (defmacro если (test &rest r)
  2.   (let* ((hp (gensym 'h))
  3.          (tp (gensym 't))  
  4.          (hp (car r))
  5.          (tp (cdr r)))
  6.    `(cond (,test ,hp)
  7.           (t ,@tp))))
  8.  
  9. ==> если
  10.  
  11. (если (> 5 6) '* (+ 8 9))
  12.  
  13. ==> 17
  14.  
  15. (если (< 5 6) '* (+ 8 9))
  16.  
  17. ==> *
  18.  
  19. (если (> 5 6) '* (printline 1) (printline 2) (printline 3))
  20. 1
  21. 2
  22. 3
  23.  
  24. ==> 3
  25.  
  26. (если (< 5 6) '* (printline 1) (printline 2) (printline 3))
  27.  
  28. ==> *

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

В данном коде определён макрос если с помощью которого можно создавать условные выражения. Макрос принимает на вход тестирующую форму (тест) и любое количество аргументов (r), которые представляются в виде списка. Внутри макроса создаются две временные переменные hp и tp, которые используются для хранения условной и альтернативной ветвей. Если тест истинен, то возвращается значение hp, иначе возвращается значение tp. В качестве примера использования данного макроса, можно рассмотреть следующий код: (если (> 5 6) ' (+ 8 9)) В данном случае, так как условие (> 5 6) истинно, то возвращается значение 17. А в этом примере: (если (< 5 6) ' (+ 8 9)) условие (< 5 6) ложно, поэтому возвращается значение *. И в этом примере: (если (> 5 6) ' (printline 1) (printline 2) (printline 3)) 1 2 3 условие (> 5 6) истинно, поэтому выводится значение 1, иначе выводятся значения 2 и 3. А в этом примере: (если (< 5 6) ' (printline 1) (printline 2) (printline 3)) условие (< 5 6) ложно, поэтому выводится значение *, иначе выводятся значения 2 и 3.

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


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

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

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

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

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

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