1

基本的な問題があります。if .. then の後に複数の関数を使用できないのはなぜですか?

check [] _ _ = []
check (x:xs) limit counter = if (x> head xs && counter < limit)
                              then incr counter -- I want here add another action 
                              else if ( x < head xs )
                                   then check xs limit counter
                                   else  incr x

main = do 
  print $ check [4,3,5,6] 1 0
  --- The answer I aim is : [3,4,5,6]

チェックの目的は、各要素が次の要素よりも大きいかどうかを調べることです。そうであれば、カウンターを増やして、場所を入れ替えるなどの別のアクションを実行します。このアクションには制限があります。ここでは 1 回だけです。 1回だけそのアクションを実行できることを意味します。

4

2 に答える 2

1

の2番目の実装についてcheck

check ( modXs, []) _ _  = modXs
check ( modXs, [x]) _ _ = x : modXs
check ( modXs, (x1:x2:xs)) counter limit 
    | x1 > x2 && counter > limit =  x2:check (x1 : xs)  (incr counter) limit
    | otherwise = x1 : check (x2 : xs) counter limit 

あなたはほとんどそこにいますがcheck、再帰的な定義ではリストを提供しているのに対し、最初の引数がペアであるため、型付けが不適切です。

于 2013-10-12T15:58:31.700 に答える