球拍初学者错误解决方案?

时间:2016-10-17 06:32:11

标签: struct racket

错误讯息 - expects a number as 1st argument, given 'hearts

我必须在不使用相同的情况下制作代码?解决方案 我的代码看起来像这样

  (define-struct card(suit value))

    (define (card=? str-1 str-2)
        (cond
          [(and(=(card-suit str-1)(card-suit str-2))
          (=(card-value str-1)(card-value str-2)))true]
          [else false]))


  (check-expect(card=?(make-card 'hearts 3) (make-card 'hearts 3))true)

编辑 - 问题是这样的,以获取更多信息

在纸牌游戏“疯狂的八人”中,玩家轮流在中心打牌,以此为目标 成为第一个没有任何牌的球员。玩家必须玩一张匹配的牌 中心卡的套装,有两个例外。首先,玩家可以改为玩牌 匹配中心卡的价值。其次,八分是“狂野的”,所以玩家可能总是玩 一个八。当一名球员打八分时,他们会说出一套西装的名字。这八个被视为 有这套衣服,即使它没有。例如,如果玩家玩八个黑桃,和 说“心”,然后下一张牌必须是“心”牌(或另外八张)。 玩家可以抽一张牌而不是玩纸牌。如果他们可以玩新卡 这样做,否则这是轮到他们的结束。 当一名球员用完纸牌时,他们就赢了。获胜的玩家获得积分 基于其他玩家持有的牌。

对于这个问题,我们将使用卡片类型代表卡片: (define-struct card (suit value)) ;; A Card is a (make-card Sym Nat) ;; requires: suit is one of ’hearts, ’diamonds, ’clubs, or ’spades ;; value between 1 and 13, using 11 for Jack, 12 for Queen, and 13 for King.

注意:我们用计算机代表这些卡,因此实际更改很容易 当它被播放时,八个黑桃成八个心!因此,在下面 功能你可以假设当前套装等于当前套牌的套装 中心,即使中心卡是八。

A)

编写一个函数card=?,它消耗两个Card结构并生成true,如果 他们代表同一张扑克牌,否则就是假。你不能使用equal? 在你的解决方案例如,(card=? (make-card ’hearts 3) (make-card ’hearts 3)) 产生真实的

b)中

编写一个函数crazy-count,它使用卡结构和当前列表 中心卡,并在列表中产生合法的卡结构数量 在中心演出。

1 个答案:

答案 0 :(得分:1)

您忘记了整个错误消息,告诉您哪个程序抱怨:

=: expects a number as 1st argument, given 'hearts

=比较数字。例如。 (= 3 5) ; ==> #f。您可能正在寻找eq?,因为它会比较它是否是相同的对象,而看起来相同的符号实际上是同一个对象。要进行更一般的检查,看看两件事情是否相同,您应该使用equal?,例如(equal? "hello" "hello") ;==> #t