2015-02-07 78 views
1

我是哈斯克爾的新手。我得到這個問題:不在範圍內:數據構造函數?

Assignment12.hs:5:12:不在範圍:數據構造'西裝 '

Assignment12.hs:5:18:不在範圍:數據構造'排名'

Assignment12.hs:6:11:不範圍:數據構造`等級 '

Assignment12.hs:7:11:不範圍:數據構造`等級'

Assignment12.hs:8: 11:不在範圍內:數據構造函數`其他' 失敗,已加載模塊:n一。

這是我的代碼:

data Suit = Clubs | Diamonds | Hearts | Spades deriving (Show, Eq) 
data Rank = Jack | Queen | King | Ace | Num Int deriving (Show, Eq) 
type Card = (Suit, Rank) 
cardValue :: Card -> Int 
cardValue (Suit, Rank) 
    | Rank == Ace = 11 
    | Rank == Ace = 11 
    | Rank == Jack = 10 
    | Otherwise = Num 

我真的很感謝你的幫助。謝謝

+1

你'Ace'兩次,而不是處理'King'或'Queen' - 它看起來像'Ace'應該有值13,然後'King','Queen' ,「傑克」? – Lee 2015-02-07 10:40:32

回答

6

在haskell變量名稱必須以小寫字母開頭。任何大寫字母都會被編譯器解釋爲Data Constructor,這就是您遇到錯誤的原因。

當您定義cardRank時,變量(suit, rank)必須以小寫字母開頭,以便代碼進行編譯。

這應該工作

data Suit = Clubs | Diamonds | Hearts | Spades deriving (Show, Eq) 
data Rank = Jack | Queen | King | Ace | Num Int deriving (Show, Eq) 
type Card = (Suit, Rank) 

cardValue :: Card -> Int 
cardValue (suit, rank) 
    | rank == Ace = 11 
    | rank == Ace = 11 
    | rank == Jack = 10 
cardValue (suit, Num x) = x 
+1

'否則'子句中的'Num'不是'Int',所以不能編譯。 – Lee 2015-02-07 10:38:30

+0

謝謝@李我現在改變了。 – 2015-02-07 10:42:59

+0

非常感謝。這樣可行 :) – Achref 2015-02-08 15:16:03

相關問題