2009-09-29 10 views
2

Je tente de construire un interpréteur rudimentaire dans Scheme, et je souhaite utiliser une liste d'associations pour mapper des fonctions arithmétiques. C'est ce que j'ai jusqu'à présent:Table de fonctions dans le schéma utilisant la liste d'associations

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

Le problème est que les éléments sur le RHS de la table sont stockés sous forme de listes de symboles. Est-ce que quelqu'un a des idées sur la façon de remédier à son. Merci d'avance.

Répondre

6

Vous voulez probablement:

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

En outre, vous pouvez utiliser une macro pour le rendre plus facile à préciser:

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