関数はリストの実行合計を返す必要があります。 [1,2,3,5]
で呼び出すと[1,3,6,11]
が返されます。私はGHCiの中でそれを実行すると、それは私を示しハスケルのscanl1について
sumlist' :: [xx]=[xx]
sumlist' []=[]
sumlist' [x]=x
sumlist' xx=scanl1 (+) [xx]
私は複数の宣言を行うこと:
は、私はこの機能を以下のように書きました。では、この関数の何が問題になっていますか?関数はリストの実行合計を返す必要があります。 [1,2,3,5]
で呼び出すと[1,3,6,11]
が返されます。私はGHCiの中でそれを実行すると、それは私を示しハスケルのscanl1について
sumlist' :: [xx]=[xx]
sumlist' []=[]
sumlist' [x]=x
sumlist' xx=scanl1 (+) [xx]
私は複数の宣言を行うこと:
は、私はこの機能を以下のように書きました。では、この関数の何が問題になっていますか?まず第一に、あなたはsumlistは、「タイプXXのリストを取り、タイプXXのリストを返しますので、
sumlist' :: [xx]->[xx]
のようなものに宣言を変更したいです。
scanl1の呼び出しで(+)を使用していて、(+)タイプがNum
であるため、sumlist 'の定義に戻って、具体的にリストを取得する必要があります数の
sumlist' :: Num xx=>[xx]->[xx]
scanl1はあなたよ、あなたはまだ、ただキックのために、あなたのコードを試してみたいのであれば、あなたが必要とするすべては、しかし
sumlist' :: Num xx=>[xx]->[xx]
sumlist' xx = scanl1 (+) xx
で、空のリストを扱うことができます最後の2行を修正する必要があります。
xが要素を含む場合、
sumlist' [x] = x
覚えておいてください、sumlistは、」リストを受け取り、はリストを返すので、戻ったばかりのリストを返します!
sumlist' [x] = [x]
そして、あなたはXXと呼ばれるリストを取る最後の場合、用
、あなたはとても、GHCは[xx]
がリストの
リストだと思いますので、 sumlist' xx=scanl1 (+) [xx]
xxは、すでにリストされてい
:だから、私たちの改訂コードのようなものがあるだけでカッコsumlist' xx=scanl1 (+) xx
を削除
ephemientとして、GHCiに複数の行を入力する必要がある場合は、:loadコマンドを使用します。
sumlist' :: [xx]=[xx]
その行が間違っています。 ::
の後の部分は、型宣言でなければなりません。型宣言は[a] -> [a]
のようになります。 (はい、それはのようなパターン/値[xx]
に見えますが、ではありません。)
GHCiのに複数行の宣言を入力しないでください、それは別に、各入力行を扱います。それをファイルに保存して、GHCiのファイル:load
を保存してください。
これは、あなたの質問に直接答えではなく、より高次の機能を使用してsumListを定義するためのより良い方法は以下のようになり:-)・ホープ、このことができますし、幸せなハッキング:
sumList :: (Num a) => [a] -> [a]
sumList = tail . scanl (+) 0
あなたの型シグネチャが、->
の明白な間違い=
にもかかわらず、あなたの関数が "Num
クラスの何らかの型"のリストでのみ機能し、 "どの型のリスト"でも機能しないという点で、 "あまりにも多態的"でした。
ハスケルコードをより読みやすくするために、コードサンプルタグを使用してください。 –
@Zach L:ポスター[それを行いました](http://stackoverflow.com/revisions/2c4cc0fb-9ac7-4112-b119-3911f779f113/view-ソース)が、コードサンプルの前後に改行がなかったので動作しませんでした。今修正されました。 –
必要なのは最後の行だけです。他の2つは冗長です(実際は2番目はタイプエラーです)。 – sepp2k