gpt4 book ai didi

scheme - 理解 Scheme 中的表达式

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:06 25 4
gpt4 key购买 nike

我正在使用在线教科书来学习 Scheme 编程语言。我无法理解教科书中练习的解决方案(练习 2.3.1。在 this page)。练习如下:

Utopia's tax accountants always use programs that compute income taxes even though the tax rate is a solid, never-changing 15%. Define the program tax, which determines the tax on the gross pay.

Also define netpay. The program determines the net pay of an employee from the number of hours worked. Assume an hourly rate of $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 之前看到一个数学运算符在 (wage h)和之前 taxwage(tax (wage h)) .在这个练习之前,教科书没有提到这个异常。之前的所有示例看起来都像 (* num1 num2) .有人可以消除我的困惑吗?谢谢。

最佳答案

确实, 在这些表达式中使用了一个数学运算符,即减法。 netpay 函数也可以这样写:

(define (netpay h)
(- (wage h) (tax (wage h))))

是不是更清楚了?在Scheme中,空格无意义,也就是说多个空格等同于一个空格,换行符等同于空格。基本上,空格的数量并不重要;它只是用作通用分隔符。

在您习惯之前,Scheme 的前缀符号有时会让人感到困惑。然而,基本思想是所有表达式都具有以下形式:

(f x ...)

这相当于函数的应用,也叫“调用函数”。在类 C 语言中,语法可能如下所示:

f(x, ...)

数学运算符只是常规函数,因此它们具有相同的语法。所以,(+ 1 2) 是 3 而 (* (+ 1 2) 3) 是 9(看看它们如何嵌套)。

那么,这个表达式有什么作用呢?

(- (wage h) (tax (wage h)))

它从 (wage h) 中减去 (tax (wage h))。在类似 C 的语法中,整个表达式看起来像这样:

wage(h) - tax(wage(h))

关于scheme - 理解 Scheme 中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com