5

わかりました、タイトルは少しわかりにくいかもしれませんが、私がやろうとしているのは、次のような機能を持たせることです:しかし、もう一度書くことなくf (a:b:c:d:is) = ...参照できるようにする. a:b:c:d結局のところ、私は何かをすることができずe@(a:b:c:d):is、期待される結果を得ることができません。何か案は?

4

2 に答える 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、適切に型付けされた式ではないことです。の定義でのバインディングによりfa, b, c, dすべてが同じ型 (たとえば) を持ちますtが、リスト コンストラクターの型は

(:) :: t -> [t] -> [t]

binding によって、あなたが望むものを達成することができますlet foo = take 4 inputList。確かに不格好ですが、頭のてっぺんからこれ以上良いものは思いつきません。

于 2012-01-03T11:51:06.827 に答える