0

我试图遵循这个问题中提供的解决方案,但它根本不起作用。

本质上,我的函数是这样工作的:

(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

现在,我尝试将函数的主体包装在“开始”中,但是在运行时它声称“开始”未定义。我使用的是初学者学生语言版本,而不是直截了当的球拍。对解决方法有任何见解吗?

4

1 回答 1

2

问题仍然存在:在所使用的语言中,我们不能在函数体中编写多个表达式,我们不能使用begin来打包多个表达式,以及两者letlambda(这将允许我们创建本地绑定)是被禁止的。这是很多限制,但我们可以使用每次计算价格的辅助函数来解决:

(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)]))

或者:如果price只使用一次,只需内联计算它的表达式,无需创建局部变量或辅助函数。

于 2014-09-22T19:39:31.680 回答