私は、次の2つの「機能」があります:彼らの両方が機能するように見える表面からSML:コンストラクタと関数はどのように区別されますか?
is_three;
val it = fn : int -> bool
SOME;
val it = fn : 'a -> 'a option
:is_threeとSOME
fun is_three(number) =
case numbers of
3 => true
| _ => false
私はこれを取得するには、次の二つの文で書くときに戻り値。私はcase文でis_threeを使用してみた場合しかし、私は、次を得る:
stdIn:20.9-20.19 Error: non-constructor applied to argument in pattern: is_three
fun are_threes(numbers) =
case numbers of
[] => true
| is_three(x)::xs => true andalso are_threes(xs)
- どのようにcase文をいただきましたコンストラクタといただきまし機能
- がなぜ機能がcase文で許可されていないを区別することができますか?
別のオプションは、コンパイル時ではなくランタイムに任せることです。一致する可能性のあるオプションが2つある場合は、ランタイム例外をスローします。 – Har
p.s. 2番目のケースで4 + 2 = 6を意味しましたか? – Har
@Harはい。ありがとう。 –