わかりました、タイトルは少しわかりにくいかもしれませんが、私がやろうとしているのは、次のような機能を持たせることです:しかし、もう一度書くことなくf (a:b:c:d:is) = ...
参照できるようにする. a:b:c:d
結局のところ、私は何かをすることができずe@(a:b:c:d):is
、期待される結果を得ることができません。何か案は?
2 に答える
6
私が考えることができる最善の方法は、次のようにビュー パターンを使用することです。
{-# LANGUAGE ViewPatterns #-}
f (splitAt 4 -> (as@[a,b,c,d], is)) = is ++ [d,c,b,a] ++ as
于 2012-01-03T11:52:11.497 に答える
5
それはできません。理由の 1 つはa:b:c:d
、適切に型付けされた式ではないことです。の定義でのバインディングによりf
、a, b, c, d
すべてが同じ型 (たとえば) を持ちますt
が、リスト コンストラクターの型は
(:) :: t -> [t] -> [t]
binding によって、あなたが望むものを達成することができますlet foo = take 4 inputList
。確かに不格好ですが、頭のてっぺんからこれ以上良いものは思いつきません。
于 2012-01-03T11:51:06.827 に答える