Scheme Beginning Student,Function Body Extra Part

时间:2014-09-22 19:35:18

标签: scheme racket

我尝试按照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'。我使用初学者学生语言版本反对直接的球拍。有关解决方法的任何见解吗?

1 个答案:

答案 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)])) 仅使用一次,只需内联计算它的表达式,就不需要创建局部变量或辅助函数。