在Scheme中定义结构。希望得到帮助

时间:2014-09-20 04:03:36

标签: scheme structure racket

我对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)))

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