Не совсем отвечаю на ваш вопрос, но я вижу несколько ошибок:
1.
(define (mynumber) (extract-binding/single `amount bindings))
Вероятно, должно быть:
(define mynumber (extract-binding/single 'amount bindings))
;; OR
;; (define mynumber (string->number (extract-binding/single 'amount bindings)))
Там нет использовать при создании процедуры в этом случае. Простое определение делает работу.
Используйте кавычки вместо кавычек, когда вы не используете кавычки.
2.
(define usd (lambda (mynumber) (* mynumber #i1.25)))
(define eur (lambda (mynumber) (* mynumber #i1.14)))
Вероятно, должно быть:
(define usd (* mynumber 1.25))
(define eur (* mynumber 1.14))
Опять же, нет необходимости создавать процедуру, потому что все, что вы хотите сделать, это умножить два числа.
Префикс #i
(неточное число) является избыточным, потому что действительные числа без по умолчанию указатель точности является неточным ( подробности здесь ).
3.
(response/xexpr
'(html (head (title "Currency Exchange"))
(body
(h1 "Currency Exchange")
(div ((class "amount"))
(p "entered amount" ,mynumber)
(p "amount in USD: " ,usd)
(p "amount in EUR: " ,eur)))))
Это можно исправить с помощью quasiquote
(то есть `
[ backtick]) вместо quote
(то есть '
), потому что вы используете unquote
(то есть ,
).
Используйте квазицитатуру вместо кавычки, когда вы используете кавычки.