Это кажется простым вопросом;возможно, это так просто, что трудно найти поиск, который найдет ответ.В Схеме (в частности, в реализации Guile, если это имеет какое-то значение), как мне оценить то, что было процитировано?
Вот что я пытаюсь сделать.
Мне в основном нужно убедиться,что функция, которую я определяю, оценивает свои аргументы в определенном порядке, потому что побочные эффекты, вызванные оценкой одного аргумента, зависят от оценки других аргументов.Тем не менее, Схема говорит, что аргументы могут быть оценены в любом порядке, поэтому я хочу вручную вызвать его, заключив аргументы в кавычки, а затем вручную оценивая их в необходимом порядке.
Похоже, что "eval" это предполагается делать то, что я хочу, но у него есть две проблемы:
- Его использование не рекомендуется, поэтому я чувствую, чтодолжен быть лучший способ выполнить то, что я хочу сделать здесь.
- В Схеме кажется, что eval принимает второй параметр, который является средой.Это смущает меня.Я хочу, чтобы он вычислялся в той же среде, в которой появляется оператор, так зачем мне нужен второй параметр?Это вообще возможно?Я немного поиграл с eval, и похоже, что в некоторых реализациях требуются разные параметры (например, mit-схема даже не знает, что такое (среда взаимодействия) !!!)
пробовал другие приемы, такие как построение лямбды:
(list 'lambda '() '(car (b c)))
, но похоже, что это должно быть оценено для генерации процедуры.Я также пытался:
(list lambda '() '(car (b c)))
, но это возвращает "примитив-встроенный макрос", который тоже не работает.
Редактировать: похоже, макрос будет работать для контроля порядка вычисления: (defmacro test1 (ab) `(begin, b, a))