直感的には、どちらも空のリストを返す必要があると思います。訂正してもらえますか?なぜだめですか ?
まあ-head
です[a] -> a
。単一の最初の要素を返します。リストはありません。
そして、空のリストのような最初の要素がない場合はどうなりますか?さて何を返すのですか?何もないところからtypeの値を作成することはできないため、a
残っているundefined
のはエラーだけです。
そしてtail
?テールは基本的に最初の要素のないリストです。つまり、元のアイテムよりも1つ短いアイテムです。最初の要素がない場合、これらの法則を守ることはできません。
箱からリンゴを1つ取り出すと、同じ箱を作ることはできません(いつ何が起こったのかtail [] == []
)。振る舞いもしなければなりundefined
ません。
これにより、次の結論が導き出されます。
私は確かにチュートリアルでこのトピックをまだカバーしていませんが、それはバグの原因ではありませんか?オプションの引数のリストを関数に渡す場合、それらを頭で読むとバグが発生する可能性がありますか?
はい、それはバグの原因ですが、欠陥のあるコードを書くことができるからです。基本的に存在しない値を読み取ろうとしているコード。したがって:*ヘッド/テールを使用しないでください**-パターンマッチングを使用します。
sum [] = 0
sum (x:xs) = x + sum xs
コンパイラーは、考えられるすべてのケースがカバーされ、値が常に定義されており、読みやすくなっていることを保証できます。