2014-09-28 56 views
2

我對Scheme很新,我正在使用DrRacket,希望能得到一些急需的幫助。Scheme(DrRacket) - 輸出整個結構

我需要「結合」我的結構的四個字段值,以使您應該返回的單個結構。

四個字段值我指的是在代碼中的if語句:

((拍賣itemnum anentry)(拍賣名稱anentry)(拍賣currbid anentry)(拍賣狀態anentry ))

這當然不起作用,因爲它不會讓我運行。

這意味着我的第二條語句也不起作用,但如果我能弄清楚第一條,那麼第二條就清楚了。

我所需要的輸出爲:(使拍賣50「鮑勃」 100「打開」)

(至少在第二檢查預期)

但搞清楚第二次檢查,預計將使其他人也工作。

這裏是我的代碼:

(define-struct auction (itemnum name currbid status)) 

(define Auction1 
    (make-auction 50 "Bob" 100 "Open")) 

(define Auction2 
    (make-auction 20 "Joe" 40 "Closed")) 

;; Data Definition of an auction 
;; An auction is a structure: (make-auction itemnum name currbid status) 
;; interp. item number, name, current bid, and status, represented 
;;   by a string 

;; Signature: auctionbid: string number entry -> entry 
;; Purpose: Consumes a bidder, a bid amount, and an auction entry 
;;   then returns an entry 
;; Tests: 
(check-expect (auctionbid "Frank" 150 Auction1) (make-auction 50 "Frank" 150 "Open")) 
(check-expect (auctionbid "Billy" 80 Auction1) (make-auction 50 "Bob" 100 "Open")) 
(check-expect (auctionbid "Jenny" 50 Auction2) (make-auction 20 "Joe" 40 "Closed")) 
;; Define: 
(define (auctionbid aname bid anentry) 
    (cond 
    [(or (< bid (auction-currbid anentry)) (string=? "Closed" (auction-status anentry))) 
    ((auction-itemnum anentry) (auction-name anentry) 
     (auction-currbid anentry) (auction-status anentry))] 
    [(> bid (auction-currbid anentry)) 
    ((auction-itemnum anentry)(aname) 
     (bid)(auction-status anentry))] 
    )) 
+1

雖然我可以發表一個答案,但我認爲你非常接近自己搞清楚了。提示:您如何製作「拍賣」結構的實例?例如,你是如何爲'Auction1'和'Auction2'變量這樣做的?你可以在'cond'表達式的兩個地方做同樣的事情嗎? – 2014-09-28 04:33:18

+0

也許我只是在推翻它,因爲我似乎無法弄清楚這一點。這讓我覺得我應該在if語句中加入'(拍賣(拍賣品)'(拍賣名稱)'(拍賣 - 現貨)'(拍賣狀態)'',但這不起作用無論是。 – BBladem83 2014-09-28 05:23:04

+1

@ BBladem83你可以發佈您嘗試過的_actual_代碼不起作用嗎?這個問題很簡單。提示:第二個案例應該是'(拍賣 - 項目資產階段)aname bid(auction-status anentry))',也就是說'aname'和'bid'不能被括號包圍。 – 2014-09-28 12:42:39

回答

2

還有就是爲什麼你會永遠希望有一個不變的結構的副本世界上沒有理由。如果你沒有改變任何東西,只需返回結構本身。否則,你需要使用「make-auction」構造一個新的結構:

(define (auctionbid aname bid anentry) 
    (cond 
    [(or (< bid (auction-currbid anentry)) 
     (string=? "Closed" (auction-status anentry))) 
    anentry] 
    [(> bid (auction-currbid anentry)) 
    (make-auction (auction-itemnum anentry) 
        aname bid 
        (auction-status anentry))]))