値が増加している間に私が取りたい値の一覧があります。私はそれが常にリストの先頭をとり、それを次の値と比較すると仮定します。これが増え続ける限り、この機能は引き続き使用されます。以前の値以下のリスト要素に到達すると、リストが返されます。増加中のリストから取り除く
takeIncreasing :: (Ord a) => [a] -> [a]
takeIncreasing [1,2,3,4,3,5,6,7,8] -- Should return [1,2,3,4]
倍は次の値と蓄積のlast
要素を比較し、条件が満たされた場合に追加しますが、リストの最後まで続けることができます。私は制約が満たされていない最初のインスタンスを取ることを止める機能を望みます。
これはモナドのアプリケーションのようですが、既存のモナドがこれを達成するかどうかを判断することはできません。
Nitpick:右折は、ハスケルのような低速評価言語**で短絡する可能性があります。しかし、これはもちろん、知ることは非常に重要なポイントです!ハスケルに来る多くの人々は、熱心に評価された言語の経験を持っています。彼らは(a)リストの最後まで続き、(b)長いリストにスタックを吹き飛ばすので、右折はしばしば逃げます。しかし、Haskellの 'foldr'はその問題を持たない方法でよく使われています。実際、Haskellの' foldl'はスタックを吹き飛ばす危険があります! –