Макрос for lisp

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

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

Как переписать макрос без использования do, loop, а только с использованием хвостовой рекурсии?
(defmacro for ((parameter start-value end-value step) &body body)
  (let ((gstop (gensym)))
    `(do ((,parameter, start-value (+ ,step ,parameter))
          (,gstop ,end-value))
         ((> ,parameter ,gstop))
       ,@body)))

Решение задачи: «Макрос for lisp»

textual
Листинг программы
; in: FOR (X 1 8 1)
;     (FOR (X 1 8 1)
;       (PRINC X))
; --> PROGN LABELS BLOCK 
; ==>
;   (LET ((SETQ X K))
;     (IF (> X 8)
;         VAL
;         (#:G613 (VAL (+ X 1)))))
; 
; caught ERROR:
;   The LET binding spec (SETQ X K) is malformed.
 
; --> PROGN 
; ==>
;   (LABELS ((#:G613 (VAL K)
;              (LET (#)
;                (IF #
;                    VAL
;                    #))))
;     (#:G613 (PRINC X) 1))
; 
; caught STYLE-WARNING:
;   The variable VAL is defined but never used.
; 
; caught STYLE-WARNING:
;   The variable K is defined but never used.
 
; file: C:/Users/yananec/Downloads/task13-1.lsp
; in: FOR (X 1 8 1)
;     (PRINC X)
; 
; caught WARNING:
;   undefined variable: X
; 
; compilation unit finished
;   Undefined variable:
;     X
;   caught 1 ERROR condition
;   caught 1 WARNING condition
;   caught 2 STYLE-WARNING conditions

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

В представленном коде есть одна строка, которая является циклом for в Lisp. Вот что делает этот код:

  1. Создает переменную X и инициализирует ее значением K.
  2. Проверяет, больше ли X 8.
  3. Если X больше 8, присваивает X значение VAL и увеличивает его на 1.
  4. Выводит значение X с помощью функции PRINC. Также есть несколько предупреждений компилятора:
  5. Переменная VAL определена, но никогда не используется.
  6. Переменная K определена, но никогда не используется.
  7. Переменная X не определена в момент использования. Итого, в данном коде допущено несколько ошибок, которые следует исправить:
  8. Исправить синтаксис определения переменной X в цикле FOR.
  9. Использовать переменную VAL или K внутри цикла FOR.
  10. Убедиться, что переменная X определена до ее использования в цикле FOR.

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


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

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

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