Как указывали другие, проблема заключается в том, что в созданном вами списке содержится символ plus, а не функция plus.
По сути, это та же причина, по которой «(a) возвращает список из двух символов, а не сигнализирует о ошибке несвязанного идентификатора; цитата начинает термин в «языке данных», где юридические идентификаторы интерпретируются как символы, а не как ссылки на переменные.
Вопрос, конечно, в том, что вы должны с этим поделать. Некоторые из них предложили использовать «eval»; это, вероятно, плохая идея, по причинам, по которым я думаю, что Мэтью Флатт элегантно улавливается в his blog post on the topic.
Вместо этого вы, вероятно, должны написать простую функцию сопоставления. Вот как я его напишу. Если вы используете мой код в задании, обязательно запишите мне :).
#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 '+) ;; ==> +
Символ '' + 'не совпадает с функцией' + '; используйте 'eval', как объяснил Оскар и проверка души, чтобы превратить первое в последнее. –
Я не думаю, что «eval» - правильный выбор здесь - я больше болтаю ниже. –