Таблица функций в схеме с использованием списка ассоциаций

Я пытаюсь создать элементарный интерпретатор в Scheme и хочу использовать список ассоциаций для сопоставления с арифметическими функциями. Это то, что у меня есть до сих пор:

; A data type defining an abstract binary operation
(define binoptable
  '(("+" . (+ x y)))
    ("-" . (- x y))
    ("*" . (* x y))
    ("/" . (/ x y)))
)

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


person Igman    schedule 29.09.2009    source источник


Ответы (1)


Вы, вероятно, хотите:

(define binoptable
  `(("+" . ,+)
    ("-" . ,-)
    ("*" . ,*)
    ("/" . ,/)))

Кроме того, вы можете использовать макрос, чтобы упростить указание:

(define-syntax make-binops
  (syntax-rules ()
    [(make-binops op ...)
     (list (cons (symbol->string 'op) op) ...)]))
(define binoptable (make-binops + - * /))
person Eli Barzilay    schedule 29.09.2009