0
我想創建一個名爲結構可以用來表示字符串,整數和列表的結構數據類型。例如,結構如下:[Int,String,Int,[Int]]。哈斯克爾,創建一個結構化的數據類型
問題1:如何創建此數據類型?
data Structured = ...
問題2:所謂確認,確認輸入的功能滿足的限制,並具有確認::限制的簽名類型 - >結構 - >也許布爾
我想創建一個名爲結構可以用來表示字符串,整數和列表的結構數據類型。例如,結構如下:[Int,String,Int,[Int]]。哈斯克爾,創建一個結構化的數據類型
問題1:如何創建此數據類型?
data Structured = ...
問題2:所謂確認,確認輸入的功能滿足的限制,並具有確認::限制的簽名類型 - >結構 - >也許布爾
data Structured = Structured Int String Int [Int]
會工作。
confirm :: (Structured -> Bool) -> Structured -> Bool
似乎是一種更明智的類型,但有一個簡單的實現爲id
。
我不認爲你需要從VALUEATION函數返回Maybe Bool
- Maybe a
適用於當你通常重新生成a
,但有時不需要。 (這對於非常簡單的錯誤處理很有用,例如 - 如果出現錯誤,請給出Nothing
)。在這種情況下,您總是可以得出結論,確定您的輸入是否有效,因此您總是可以給出True
或False
- 否需要Maybe
。
也許你可以有類似
confirm :: (String -> Bool) -> (Int -> Bool) -> Structured -> Bool
confirm okString okInt (Structured int1 string int2 ints) =
all okInt (int1:int2:ints) && okString string
這裏int1:int2:ints
是,在ints
前int2
前面有int1
列表。
結構定義一個稍微更好的辦法是:
data Structured = Structured {
length ::Int,
name ::String,
width ::Int,
somenumbers :: [Int]}
,那麼你就必須
confirm :: (String -> Bool) -> (Int -> Bool) -> Structured -> Bool
confirm okString okInt s =
all okInt (length s:width s:somenumbers s) && okString (name s)
它做相同的工作作爲第一個數據聲明,但給你功能,讓在內部。
這是功課嗎?你有什麼嘗試? – dave4420
有什麼可能的限制嗎? 「確認」的'Maybe Bool'結果是什麼意思?在這種情況下,「Nothing」意味着什麼?這與「Just True」和「Just False」的含義有什麼不同? – dave4420