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

 金里昂钢琴艺术中心 发布于 2022-12-20 14:52

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

Greg Henders.. 5

首先,您的EmployeeRaise函数应该执行您在"签名"中描述的内容并采用employee结构(由返回make-employee),而不是a 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%正确的.但我认为我所描述的应该指向正确的方向.

1 个回答
  • 首先,您的EmployeeRaise函数应该执行您在"签名"中描述的内容并采用employee结构(由返回make-employee),而不是a 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%正确的.但我认为我所描述的应该指向正确的方向.

    2022-12-20 14:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有