Haskellに同じコードが2つあり、どちらも特定の位置(パラメーターn)でリストを分割する必要がありますが、一方が機能している間、もう一方は機能していません。なぜそれが発生するのでしょうか。
divide [] _ = ([],[])
divide (h:t) n
| n>0 = ( h:list1 , list2 )
| otherwise = ([],h:t)
where (list1, list2) = divide t (n-1)
上記のコードは問題なく機能しますが、以下のコードは機能しません。
divide [] _ = ([],[])
divide (h:t) n
| n>0 = ( h:( divide t (n-1) ) , divide t (n-1) )
| otherwise = ([],h:t)
ghciは次のメッセージを出します:
split.hs:3:29:
Couldn't match expected type '[a0]' with actual type '([a0], [a1])' In the return type of a call of 'divide' In the second argument of '<:>', namely ' divide t (n-1) ' In the expression: h: divide t (n-1)
編集:
ちょっと注意してください、私はそれを仮定しています
where (list1, list2) = divide t (n-1)
と同等です
where list1 = divide t (n-1)
list2 = divide t (n-1)
私の仮定は正しいですか?間違った仮定は、さらに悪い結論につながる可能性があります。