2014-09-20 21 views
1

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

回答

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%正確的。但我認爲我所描述的應該指向正確的方向。

+0

它一開始並沒有工作,但它在你剛剛編輯之後就起作用了。謝謝! – BBladem83 2014-09-20 04:33:59