Как уже отмечали другие, проблема в том, что созданный вами список содержит символ плюс, а не функцию плюс.
По сути, это та же самая причина, по которой '(a b) возвращает список из двух символов, а не сигнализирует об ошибке несвязанного идентификатора; в кавычке начинается термин на «языке данных», где юридические идентификаторы интерпретируются как символы, а не как переменные ссылки.
Вопрос, конечно, в том, что вы должны с этим делать. Некоторые здесь предложили использовать «eval»; это, вероятно, плохая идея, по причинам, которые, как мне кажется, Мэттью Флэтт изящно фиксирует в своем блоге на тему .
Вместо этого вам, вероятно, следует написать простую функцию отображения. Вот как я бы это написал. Если вы используете мой код в назначении, обязательно укажите мне :).
#lang racket
;; a mapping from symbols to operators
(define operator-hash
(hash '+ +
'- -
'* *))
;; ... and whatever other operators you want.
;; example of using it:
(hash-ref operator-hash '+) ;; ==> +