2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Функция until->transformed racket
Сообщение23.12.2020, 16:29 
Есть особая форма until, которая записывается так
Код:
(until
exp1
...
expn
test)

Здесь последовательно вычисляются exp1, . . . , expn, после чего вычисляет значение test. Если оно ложно, то снова вычисляются значения exp1, . . . , expn и т.д. Если значение test истинно, вычисление заканчивается с неопределенным значением #void. Необходимо написать функцию until->transformed, переводящую особую форму в выражение вида
Код:
(let ()
(define (loop)
exp1
...
expn
(if test (void) (loop)))
(loop))

Помогите разобраться как это сделать.
Я так понимаю нужно объявить функцию с аргументами exp1,...,expn, но я не совсем понимаю как получить выражение выше. Список передать с let()?
Код:
(define (until->transformed exp1 ... expn)
( тело функции )
)

 
 
 
 Re: Функция until->transformed racket
Сообщение23.12.2020, 20:40 
Видимо, на вход until->transformed подаётся всё-таки всё выражение (until ...) целиком. Им просто нужно манипулировать как списком, достав из него выражения, стоящие на месте аргументов exp1 ... expN test (и проверить, что голова списка — символ until), и поставить их в результирующий список, скорее всего используя псевдоцитирование.

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group