ハスケルのリストの最後の2つの要素を交換する必要がありますハスケルの最後の2つの要素を交換するには?
これは私がこれまでに持っていてコンパイルしていないものです。
swapLastTwo :: [a] -> Maybe [a]
swapLastTwo list = case list of
xs:x:y -> Just (xs:y:x)
_ -> Nothing
しかしこの1つはコンパイル:
swapFirstTwo :: [a] -> Maybe [a]
swapFirstTwo list = case list of
x:y:xs -> Just (y:x:xs)
_ -> Nothing
違いは何ですか?私はこれらのx y xsなどに問題があると思います。私はそれらとはかなり確信していません。
コンパイラは、このエラーに
• Couldn't match expected type ‘[[a]]’ with actual type ‘a’
‘a’ is a rigid type variable bound by
the type signature for:
swapLastTwo :: forall a. [a] -> Maybe [a]
at BuiltInList.hs:69:16
• In the second argument of ‘(:)’, namely ‘x’
In the second argument of ‘(:)’, namely ‘y : x’
In the first argument of ‘Just’, namely ‘(xs : y : x)’
• Relevant bindings include
y :: [a] (bound at BuiltInList.hs:71:10)
x :: a (bound at BuiltInList.hs:71:8)
xs :: a (bound at BuiltInList.hs:71:5)
list :: [a] (bound at BuiltInList.hs:70:13)
swapLastTwo :: [a] -> Maybe [a] (bound at BuiltInList.hs:70:1) Failed, modules loaded: none.
を与えていただきありがとうございます。
ありがとうございました。 –
私はこれを持っています。おそらく私はまだ何かを理解していないでしょう... –
空の配列括弧 '[]'は、私が示した例のように、_right_に行きます([]]:x:y - > Just([]:y:x) 。 –