Скажите в lisp можно создать программу которая сама себя модифицирует?

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

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

Заменяет код программы частично или полностью. И выполняет его. Возможно такое?

Решение задачи: «Скажите в lisp можно создать программу которая сама себя модифицирует?»

textual
Листинг программы
  1. (define-syntax foo
  2.   (syntax-rules ()
  3.     ((_)
  4.      (datum->syntax #f (read)))))
  5.  
  6. > (eval (foo))
  7. ((lambda (x) (* x x)) 2)
  8. 4
  9. >

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

В представленном коде на языке Lisp определён синтаксический макрос foo, который при вызове считывает некоторое количество пробелов, а затем вызывает функцию datum->syntax с аргументом #f и результатом вызова функции read. То есть при каждом вызове макроса foo считывается строка, и в этой строке ищется лексема (слово или символ), которая соответствует синтаксическому контексту, заданному в определении макроса. И затем в этом месте в синтаксическом выражении вставляется результат вызова функции datum->syntax с аргументом #f и результатом вызова функции read. То есть если вызвать макрос foo без аргументов, он считывает строку, в которой первым встречает пробел, и в этом месте в синтаксическом выражении подставляет результат вызова функции datum->syntax с аргументом #f и результатом вызова функции read. Затем вызывается функция eval с аргументом (lambda (x) (* x x)) 2, которая считывает строку с результатом вызова функции read, и в этом месте в синтаксическом выражении подставляет результат вызова функции datum->syntax с аргументом #f и результатом вызова функции read. То есть результат вызова функции eval — это результат вызова функции read, в котором первым встречает пробел, и в этом месте в синтаксическом выражении подставляет результат вызова функции datum->syntax с аргументом #f и результатом вызова функции read. Затем вызывается функция read, которая считывает строку, и в этом месте в синтаксическом выражении подставляет результат вызова функции datum->syntax с аргументом #f и результатом вызова функции read. И в результате вызова функции read результатом является число 4.

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


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

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

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

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

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

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