在Scheme中定义结构。希望得到帮助
我对这个计划还比较陌生,我正在使用DrRacket,我希望能得到一些急需的帮助 我正在定义结构,我在某种程度上理解它,但我似乎遇到了障碍 我需要使“EmployeeRaise”函数适用于所有检查预期,而不是使其仅适用于一个特定的检查预期 主要问题是,在定义中,更具体地说,在黑体部分 (+(员工小时工资em)(*(员工小时工资em)0.1))) 我似乎不知道它如何确定每个人的员工时薪,而不是定义为“em”的员工 我想让所有三名员工都用“em”来定义,但它不允许我这么做 我希望有人能帮助我 这是我的密码:在Scheme中定义结构。希望得到帮助,scheme,structure,racket,Scheme,Structure,Racket,我对这个计划还比较陌生,我正在使用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)))
首先,您的
EmployeeRaise
函数应该按照您在“签名”中描述的那样执行,并采用employee
结构(由make employee
返回),而不是字符串。因此,让我们将参数的名称更改为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)))
注意,这个函数现在是在它得到的参数上运行的,而不是之前的“全局变量”
接下来,为了进行测试,您可以这样做:
(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%正确。但是我认为我所描述的应该为您指出正确的方向。首先,您的EmployeeRaise
函数应该按照您在“签名”中描述的那样执行,并采用employee
结构(由make employee
返回),而不是字符串。因此,让我们将参数的名称更改为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)))
注意,这个函数现在是在它得到的参数上运行的,而不是之前的“全局变量”
接下来,为了进行测试,您可以这样做:
(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%正确。但我认为我所描述的应该为您指出正确的方向。它起初不起作用,但在您刚刚编辑它之后就起作用了。非常感谢。起初它不起作用,但在你刚刚编辑它之后它就起作用了。非常感谢。