0

私はHaskellの学習を始めましたが、リストのデカルト積がどのように機能するかを理解するのに問題があります

ここに想定されるコードがあります

cprod = foldr f [[ ]]
      where f xs yss = foldr g [ ] xs
            where g x zss = foldr h zss yss
                  where h ys uss = (x : ys) : uss

正確に得られないのは、私が理解している変数名を置き換えた最後の関数です

mycart = foldr f [[]]
    where f currentresult listelem = foldr g [] currentresult
          where g currentresultonstep currentresultelem = foldr h currentresultelem listelem
                where h currentresultelemonstep onelistelem = (currentresultonstep:currentreslteleemonstep):onelistelem

最後の文字列はこのようなものであるべきではありませんか?

where h currentresultelemonstep onelistelem = (onelistelem:currentresultelemonstep):currentresultonstep

現在の結果の要素の先頭にリストの要素を追加しようとすると?

4

1 に答える 1

3

まず、書かれたコードは構文的に有効ではありません。

foo.hs:3:13: parse error on input `where'

第二に、の最初のパラメーターの引数の順序について混乱しているようですfoldr:

foldr :: (a -> b -> b) -> b -> [a] -> b

最初の引数 ( a) は入力リスト ( [a]) の要素であり、2 番目の引数 ( b) はアキュムレータです。

于 2012-11-30T06:37:32.373 に答える