【问题标题】:Defining Structures in Scheme. Hope for assistance在 Scheme 中定义结构。希望得到帮助
【发布时间】:2014-09-20 12:31:28
【问题描述】:

我是 Scheme 的新手,我正在使用 DrRacket,我希望能得到一些急需的帮助。

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

我需要使“EmployeeRaise”功能适用于所有检查预期,而不是使它只能适用于一个特定的检查预期。

主要问题是在定义中,更具体地说,在粗体部分,

(+ (员工-时薪 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)))

【问题讨论】:

    标签: scheme structure racket


    【解决方案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% 正确的。但我认为我所描述的内容应该为您指明正确的方向。

    【讨论】:

    • 一开始是不行的,但是你刚才编辑之后就可以了。谢谢!
    猜你喜欢
    • 2013-10-15
    • 2013-10-09
    • 2013-10-07
    • 2013-10-07
    • 1970-01-01
    • 2011-10-05
    • 2011-01-02
    • 2019-08-18
    相关资源
    最近更新 更多