контрольная оценка в схеме (хитрость)

Это кажется простым вопросом; возможно, он настолько прост, что трудно найти поиск, который найдет ответ. В Scheme (в частности, Хитрость реализации, если это имеет какое-то значение) как мне оценить то, что было процитировано?

Вот что я пытаюсь сделать.

Мне в основном нужно убедиться, что определяемая мной функция получает свои аргументы, оцениваемые в конкретном порядок, потому что побочные эффекты, вызванные оценкой одного аргумента, зависят от во время оценки других аргументов. Однако Scheme говорит, что аргументы можно оценивать в любом порядке, поэтому я хочу вручную принудительно использовать его, цитируя аргументы, а затем вручную оценивая их в

Похоже, что "eval" предполагается , чтобы делать то, что я хочу, но у него есть две проблемы:

  1. Его использование не рекомендуется, поэтому я чувствую, что должен быть лучший способ выполнить то, что я хочу здесь сделать.
  2. На схеме это появляется этот eval принимает второй параметр, которым является окружение. Меня это сбивает с толку. Я хочу, чтобы он оценивал ту же среду, в которой появляется оператор, так зачем мне нужен второй параметр? Это вообще возможно? Я немного поиграл с eval, и похоже, что для некоторых реализаций требуются другие параметры (например, mit-scheme даже не знает, что такое (интерактивная среда) !!!)

Я пробовал другие уловки, например, сборку вверх лямбда:

(list 'lambda '() '(car (b c)))

, но кажется, что затем это нужно будет вычислить для генерации процедуры. Я также пробовал:

(list lambda '() '(car (b c)))

, но это возвращает "примитивно-встроенный макрос", который тоже не работает.

Изменить: Похоже, что макрос будет работать для управления порядком оценки: (defmacro test1 (ab) `(begin, b, a))

6
задан Michael 8 July 2011 в 23:54
поделиться