【发布时间】:2014-09-28 03:59:00
【问题描述】:
我是 Scheme 的新手,我正在使用 DrRacket,我希望能得到一些急需的帮助。
我需要“组合”我的结构的四个字段值以创建一个您应该返回的单一结构。
我所指的四个字段值在代码的if语句中:
((auction-itemnum anentry)(auction-name anentry)(auction-currbid anentry)(auction-status anentry))
这当然行不通,因为它不会让我运行它。
这意味着我的第二个 if 语句也不起作用,但如果我能弄清楚第一个,那么第二个就会清楚。
我需要的输出是:(make-auction 50 "Bob" 100 "Open")
(至少对于第二次检查期望)
但弄清楚第二个检查期望将使其他检查也能正常工作。
这是我的代码:
(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))]
))
【问题讨论】:
-
虽然我可以发布一个答案,但我认为您已经非常接近于自己弄清楚了。提示:如何创建
auction结构的实例?例如,您是如何对Auction1和Auction2变量执行此操作的?你能在cond表达式的两个地方做同样的事情吗? -
也许我只是想多了,因为我似乎仍然无法弄清楚这一点。这让我觉得我应该在 if 语句中放入 '(make-auction (auction-itemnum anentry) (auction-name anentry) (auction-currbid anentry) (auction-status anentry))' ,但这不起作用要么。
-
@BBladem83 你能贴出你试过的actual代码吗?这个问题真的很简单。提示:第二种情况应该写成
(make-auction (auction-itemnum anetry) aname bid (auction-status anentry)),也就是说aname和bid不能用括号括起来。 -
@ChrisJester-Young 哇,好吧。我想到了。我觉得真的很傻哈哈。谢谢!
-
可以回答您自己的问题并接受该答案。这样一来,其他有相同问题的人就可以更轻松地在以后谷歌上搜索……或者如果他们没有在谷歌上搜索答案,而是在这里询问,以便有人快速指出该人的答案。