错误讯息 - 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
,它使用卡结构和当前列表
中心卡,并在列表中产生合法的卡结构数量
在中心演出。
答案 0 :(得分:1)
您忘记了整个错误消息,告诉您哪个程序抱怨:
=: expects a number as 1st argument, given 'hearts
=
比较数字。例如。 (= 3 5) ; ==> #f
。您可能正在寻找eq?
,因为它会比较它是否是相同的对象,而看起来相同的符号实际上是同一个对象。要进行更一般的检查,看看两件事情是否相同,您应该使用equal?
,例如(equal? "hello" "hello") ;==> #t
。