私はまだプログラミングに非常に慣れていないので、Haskellの構文に苦労しています。何を実装したいのかはある程度わかっていますが、それを行う方法がよくわからないので、ここに尋ねに来ました。
だから私が持っているのは、3つの異なる関数によって定義された特定の順序ではない数字の「山」です。この例は次のようになります。
lowestnumber = 4
highestnumber 5 = True
highestnumber _ = False
above 4 = 11
above 11 = 18
above 18 = 2
above 2 = 3
above 3 = 5
above 5 = error "highest Number"
above _ = error "Not part of the pile"
ここで、特定の数がこのパイルの一部であるかどうかをチェックする関数と、入力変数なしでリストのすべての要素を合計する別の関数 "sum' = " を書きたいと思います。まず、リストを定義し、リストコマンドを使用して合計し、elem
そのリストに何かが含まれているかどうかを確認することでこれらの問題を解決しましたが、リストを使用せずに解決することになっています。
したがって、これを解決する方法についてのアイデアはありますが、数え切れないほどのエラーを受けずに実際に記述する方法はわかりません。私がチェック機能のために試したことのいくつかの例:
check x = if above x /= error "Not part of the stack" || lowestnumber == x then True else False
このように「_」を使用してチェックも試みましたが、どちらも機能しません。
check x if above x == _ || lowestnumber == x then True else False
sum 関数の私のアイデアは次のとおりです。
sum' = lowestnumber + above lowestnumber + above (above lowestnumber) + above (above (above lowestnumber))
または次のようなもの
sum' = lowestnumber + (above sum')
私が理解していることは
などですが、どうやら再帰を使用してこれを実装する方法がわかりませんでした。
うまくいけば、この質問はあまりにも愚かではありません! あなたが私を助けてくれることを願っています:)
編集:わかりました、これらは私の3つの機能問題の解決策です
sumup' a b
|highestNumber a == True = a+b
|otherwise = sumup' (above a) (a+b)
sumup = sumup' lowestNumber 0
check' a b
|a == b = True
|True == highestNumber a && a==b = True
|True == highestNumber a && a/=b = False
|check' (above a) (b) == True = True
|otherwise = False
check b = check' (lowestNumber) (b)
above' :: Integer -> Integer -> Bool
above' x y
| check x == False = False
| check y == False = False
| highestNumber y == True = False
| highestNumber x == True = True
| x==y = True
| above' x (above y) == True = True
| otherwise = False