我尝试按照this question中提供的解决方案,但它根本不起作用。
基本上,我的功能是这样的:
(define (item-price size normal-addons premium-addons discount)
(define price 0)
(+ price (* normal-addon-cost normal-addons) (* premium-addon-cost premium-addons) size)
(cond
.. some conditions here
[else price]))
但是,我遇到以下错误:
define: expected only one expression for the function body, but found 2 extra parts
现在,我尝试将函数的主体包装在'begin'中,但是在运行时它声称未定义'begin'。我使用初学者学生语言版本反对直接的球拍。有关解决方法的任何见解吗?
答案 0 :(得分:2)
问题仍然存在:在使用的语言中,我们不能在函数体内写入多个表达式,我们不能使用begin
来包装多个表达式,并且{禁止使用{1}}和let
(这将允许我们创建本地绑定)。这有很多限制,但我们可以使用每次计算价格的辅助函数:
lambda
或者:如果(define normal-addon-cost 10) ; just an example
(define premium-addon-cost 100) ; just an example
(define (price size normal-addons premium-addons)
(+ (* normal-addon-cost normal-addons)
(* premium-addon-cost premium-addons)
size))
(define (item-price size normal-addons premium-addons discount)
(cond
... some conditions here ...
[else (price size normal-addons premium-addons)]))
仅使用一次,只需内联计算它的表达式,就不需要创建局部变量或辅助函数。