【问题标题】:Scheme (DrRacket) - Outputting an entire StructureScheme (DrRacket) - 输出整个结构
【发布时间】: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 结构的实例?例如,您是如何对Auction1Auction2 变量执行此操作的?你能在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)),也就是说anamebid不能用括号括起来。
  • @ChrisJester-Young 哇,好吧。我想到了。我觉得真的很傻哈哈。谢谢!
  • 可以回答您自己的问题并接受该答案。这样一来,其他有相同问题的人就可以更轻松地在以后谷歌上搜索……或者如果他们没有在谷歌上搜索答案,而是在这里询问,以便有人快速指出该人的答案。

标签: scheme structure racket


【解决方案1】:

世界上没有任何理由需要不可变结构的副本。如果您不更改任何内容,只需返回结构本身。否则,您需要使用“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))]))

【讨论】:

    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2011-12-13
    • 2015-02-14
    相关资源
    最近更新 更多