2016-10-17 73 views
1

錯誤消息-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=?消耗兩張牌結構,如果 它們表示相同的撲克牌生產真,否則爲假。您的解決方案中不得使用equal? 。例如,(card=? (make-card ’hearts 3) (make-card ’hearts 3)) 產生真

B)

寫功能crazy-count消耗卡的結構和電流 中心卡的列表,併產生在列表中可以合法是 卡結構的數量在中心玩。

回答

1

你全忘了錯誤信息,告訴你哪個程序抱怨:

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

=比較數字。例如。 (= 3 5) ; ==> #f。您可能正在尋找eq?,因爲它會比較它是否是相同的對象,看起來相同的符號實際上是同一個對象。要進行更一般的檢查,看看兩件事看起來是否相同,則應使用equal?,例如(equal? "hello" "hello") ;==> #t

+0

但''你好'''是一個字符串在這裏我有符號''心臟'所以它不起作用 – kaminey

+0

'平等?'對所有看起來相同的東西都適用,包括符號,但'eq?'是明顯的選擇。 Se http://stackoverflow.com/q/16299246/1565698 – Sylwester