【发布时间】:2015-03-31 00:54:49
【问题描述】:
我正在使用在线教科书来学习 Scheme 编程语言。我无法理解教科书中练习的解决方案(练习 2.3.1。this page)。练习如下:
乌托邦的税务会计师总是使用计算所得税的程序 即使税率是固定不变的 15%。定义 计划税,它决定了总工资的税额。
同时定义 netpay。该计划确定员工的净工资 从工作小时数。假设每小时 12 美元。
在求助于教科书中提供的解决方案(找到here)之前,我做了几次尝试来完成它。解决方法如下:
;; computes the tax
(define (tax w)
(* 0.15 w))
;; computes the net pay
(define (netpay h)
(- (wage h)
(tax (wage h))))
;; computes the wage for a given number of hours
(define (wage h)
(* h 12))
;; EXAMPLES TURNED INTO TESTS
(tax 100) ;; should be 15
(wage 2) ;; should be 24
(netpay 40) ;; should be 408
这是让我感到困惑的代码部分:
(define (netpay h)
(- (wage h)
(tax (wage h))))
我不明白为什么这个表达式有效。我期待在(wage h) 中的wage 和tax 和wage 之前在(tax (wage h)) 中看到一个数学运算符。在这个练习之前,教科书没有提到这个异常。之前的所有示例都类似于(* num1 num2)。有人可以解决我的困惑吗?谢谢。
【问题讨论】:
-
scheme 中的数学运算符实际上只是另一个函数。请记住,这不是中缀;它看起来不像一个普通的数学表达式。想想:
(function parameter) -
如果
wage之前有一个运算符,比如(+ wage h),那意味着什么?如何为数字添加函数? -
(wage something)表示将something乘以 12。 -
@WickedJargon 表达式
(wage x)将wage函数应用到x。 -
(wage h)和(tax (wage h))在这个表达式中是什么意思?教科书在练习之前没有明确说明这一点。所以我假设tax和wage都是变量/数字。
标签: scheme lisp expression