0

String、IntListを表すために使用できるStructuredという構造データ型を作成したいと思います。たとえば、構造は次のようになります:[ IntStringInt、[ Int ]]。

質問1:このデータ型を作成する方法は?

data Structured = ...

質問2:入力が制限を満たしていることを確認するConfirmという関数で、署名タイプはconfirm::制限->構造->MaybeBoolです。

4

1 に答える 1

8
data Structured = Structured Int String Int [Int]

動作します。

confirm :: (Structured -> Bool) -> Structured -> Bool

より賢明なタイプのようですが、のように簡単な実装がありidます。

Maybe Bool評価関数から戻る必要はないと思いますMaybe a。通常はを返す場合に適していますaが、そうでない場合もあります。(たとえば、非常に単純なエラー処理に適しています。たとえばNothing、エラーが発生した場合はgiveします。)この場合、入力が有効かどうかをいつでも結論付けることができるため、いつでも返すことができTrueますFalseMaybe

おそらくあなたは次のようなものを持つことができます

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これがのint1前にあるリストint2ですints

構造化を定義するもう少し良い方法は次のとおりです。

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)

これは最初のデータ宣言と同じ仕事をしますが、内部を取得するための関数を提供します。

于 2012-10-22T11:17:11.063 に答える