4

As part of learning Haskell, I am trying to implement my own version of various functions associated with Lists. Right now I am stuck on the init function. init function in Haskell returns all the elements in a List other than the last element.

Here is what I have done so far.

init' :: [Int] -> [Int]
init' [] = error "This function cannot be applied to an empty list"
init' [x] = [x]
init' (x:xs) = x : init' xs
4

4 に答える 4

14

あなたの問題はあなたのベースケースです。ここ:

init' [x] = [x]

あなたは、1つの要素を含むリストにたどり着いたときに、同じリストを返したいと言っています。これは望ましい結果ではありません。要素が1つしかないリストがある場合は、空のリストを返します(1つのアイテムの最後の要素を除くすべてが空のリストです)。

init' [x] = []

ちなみに、おそらく次のように宣言する必要があります

init' :: [a] -> [a]

タイプとして「a」を使用すると、Intだけではなく、あらゆるもののリストに一般化されます。そうすれば、あらゆる種類のリストでinit'を呼び出すことができます。たとえば、init'"abcde"はあなたに"abcd"を与えるでしょう

于 2010-02-12T00:42:08.963 に答える
4

2番目のルールは次のようになります。

init' [x] = []

リストに要素が1つしかない場合は、それが最後の要素であるため、最後の要素がないリストは空のリストになります。

于 2010-02-12T00:41:50.443 に答える
3
init' [x] = [x]

これは正しくありません。1要素リストの最後の要素を削除すると、同じリストは返されません。空のリストが返されます。

于 2010-02-12T00:41:54.423 に答える
-1

Here is my version try this.

init' :: [a] -> [a]

init' []  = error("This is not right, empty list is not allowed here")
init' (x:[]) = [x]
init' (x:xs:[]) = [x]
init' (x:xs) = x: init' xs
于 2011-12-24T09:43:00.243 に答える