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

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

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

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

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

textual
Листинг программы
(defmacro если (test &rest r)
  (let* ((hp (gensym 'h))
         (tp (gensym 't))  
         (hp (car r))
         (tp (cdr r)))
   `(cond (,test ,hp)
          (t ,@tp)))) 
 
==> если
 
(если (> 5 6) '* (+ 8 9))
 
==> 17
 
(если (< 5 6) '* (+ 8 9))
 
==> *
 
(если (> 5 6) '* (printline 1) (printline 2) (printline 3))
1
2
3
 
==> 3
 
(если (< 5 6) '* (printline 1) (printline 2) (printline 3))
 
==> *

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

В данном коде определён макрос если с помощью которого можно создавать условные выражения. Макрос принимает на вход тестирующую форму (тест) и любое количество аргументов (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