は、私はこのような愚かな何かを持っていると言う:ハスケルの場合の短い構文?
data SomeType
= Unary Int
| Associative SomeType
| Binary SomeType SomeType
some_func :: SomeType -> Int
some_func s =
case s of
Unary n -> n
Associative s1 -> some_func s1
Binary s1 s2 -> some_func s1 + some_func s2
ここsome_funcが与えられたSomeType内のすべてのSomeTypesに目を通すと、すべての単項データコンストラクタのint型を合計します。 SomeTypeは再帰的なデータ型です。
これらのパターンの一致では、私はsome_func s1
を繰り返しています。 @、いつ、何か他のものを使用してsf1 = some_func s1
を宣言し、両方で使用する方法はありますか?このような何か:
data SomeType
= Unary Int
| Associative SomeType
| Binary SomeType SomeType
some_func :: SomeType -> Int
some_func s =
case s of
Unary n -> n
Associative s1 -> sf1
Binary s1 s2 -> sf1 + sf2
where
sf1 = some_func s1
sf2 = some_func s2
ここでの問題は、S1とS2のみ->
後のブロックで知られており、SF1を計算することができないということです。
s1とs2とは何ですか、私はその定義を見ることができません。あなたはsをパラメタとして得て、sf1とsf2だけを定義します。 –
s1とs2はSomeTypeのもので、ケースのパターン一致のものです –