2014-09-28 58 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))]))