0
非常に単純なコードです。最後の3番目の項目をリストから取得します。 2のHaskellのif文が正しく動作しない
list numbers = if length numbers > 3
then numbers!!(length numbers - 3)
else "length must be greater than 2"
私はしかし、このエラーを得続けるGHCiの上でそれを実行しようと、
*メイン>リスト[2,3,4]
<interactive>:65:7: No instance for (Num [Char])
arising from the literal `2'
Possible fix: add an instance declaration for (Num [Char])
In the expression: 2
In the first argument of `list', namely `[2, 3, 4]'
In the expression: list [2, 3, 4]
変数の型が同じでなければならないのif-else文では?この言語はとてもかわいいです –
@bossrevs if-elseは値に評価される式です。多くのプログラミング言語は同じセマンティクスを持っています。ハスケルはいろいろな意味で「奇妙」かもしれませんが、これはその1つではありません – user2297560
@bossrevs確かに。 'then foo then else else'のような式の型はどうでしょうか?' then'節と 'else'節は一致しません。ハスケルに限らず、他のほとんどの言語で 'if' /' then'/'else'は式ではなく文であり、" statement "を独自の型と考えることができます(そして、何も挿入しないデフォルトの文があります指定しない場合は 'else'ブランチです)。 –