定义Scheme中的结构。希望获得帮助

问题描述:

我对Scheme很新,我正在使用DrRacket,希望能得到一些急需的帮助。定义Scheme中的结构。希望获得帮助

我正在定义结构,我在某种程度上理解,但我似乎遇到了一个障碍。

我需要这样做,因此“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))) 

首先你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%正确的。但我认为我所描述的应该指向正确的方向。

+0

它一开始并没有工作,但它在你刚刚编辑之后就起作用了。谢谢! – BBladem83 2014-09-20 04:33:59