我对Scheme很新,我使用DrRacket,我希望得到一些急需的帮助。
我正在定义结构,我在某种程度上理解,但我似乎遇到了障碍。
我需要让它成为" EmployeeRaise"函数适用于所有检查期望,但不能使它只能用于一个特定的检查期望。
主要问题是在定义中,更具体地说,在粗体部分,
(+(员工 - 小时率em )(*(员工 - 小时率em )0.1)))
我似乎无法弄清楚如何确定每个人的员工每小时费率,而不是那些用" em定义的员工。"
我认为将所有三名员工定义为" em"但它不会让我这样做。
我希望有人可以帮助我。
这是我的代码:
(define-struct employee (Name Hourly-rate overtime?))
;;Signature: EmployeeRaise: string -> number
;;Purpose: Consumes an employee and returns an employee with the hourly rate increased by 10%.
;;Tests
(check-expect (EmployeeRaise "Ben") 13.2)
(check-expect (EmployeeRaise "Joe") 16.5)
(check-expect (EmployeeRaise "Debbie") 22)
;; Define
(define (EmployeeRaise employee-Name)
(+ (employee-Hourly-rate em) (* (employee-Hourly-rate em) 0.1)))
答案 0 :(得分:5)
首先,您的EmployeeRaise
函数应执行您在“签名”中描述的内容并采用employee
结构(由make-employee
返回),而不是string
。因此,让我们将参数的名称更改为em
以反映:
;;Signature: EmployeeRaise: employee -> number
;;Purpose: Consumes an employee and returns an employee with the hourly rate increased by 10%.
;;Tests
(define (EmployeeRaise em)
(+ (employee-Hourly-rate em) (* (employee-Hourly-rate em) 0.1)))
请注意,此函数现在正在em
正在运行的参数上运行 - 不是之前的em
“全局变量”。
接下来,为了进行测试,您可以这样做:
(define ben (make-employee "Ben" 12 true))
(define joe (make-employee "Joe" 15 false))
(define deb (make-employee "Debbie" 20 true))
(check-expect (EmployeeRaise ben) 13.2)
(check-expect (EmployeeRaise joe) 16.5)
(check-expect (EmployeeRaise deb) 22)
或者只是这个:
(check-expect (EmployeeRaise (make-employee "Ben" 12 true)) 13.2)
(check-expect (EmployeeRaise (make-employee "Joe" 15 false)) 16.5)
(check-expect (EmployeeRaise (make-employee "Debbie" 20 true)) 22)
注意:我猜你正在使用htdp语言?由于我对它们了解不多,我无法猜出哪一个,我无法运行上面的代码以确保它是100%正确的。但我认为我所描述的应该指向正确的方向。