2016-03-22 4 views
-4

私は彼に3つの数字を与えると彼はそれらを三日月にする必要があるプログラム、こんにちは私はプログラミングのhaskell、それは私にエラーを与えるghg.hs:45:1:誤ったインデントまたは不一致の角かっこ

ordertriple :: (Integer, Integer, Integer) -> (Integer, Integer, Integer) 
ordertriple (x, y, z) 
     | x < y && x < z && y < z = (three x, three y, three z) 
     | x < y && x < z && z < y = (three x, three z, three y) 
     | y < x && y < z && x < z = (three y, three x, three z) 
     | y < x && y < z && z < x = (three y, three z, three x) 
     | z < x && z < y && y < x = (three z, three x, three y) 
     | otherwise    = (three z, three y, three x) 

答えて

3

をあなたはteger, Integer, Integerx,y,zで周り(..)が欠落している:私はやってみました何3.ザッツによって数値を乗算機能3

orderTriple :: (Integer, Integer, Integer) -> (Integer, Integer, Integer) 
orderTriple (x, y, z) 
    | x < y && x < z && y < z = (three x, three y, three z) 
    | x < y && x < z && z < y = (three x, three z, three y) 
    | y < x && y < z && x < z = (three y, three x, three z) 
    | y < x && y < z && z < x = (three y, three z, three x) 
    | z < x && z < y && y < x = (three z, three x, three y) 
    | otherwise    = (three z, three y, three x 

は動作するはず

+0

はすでにそれをやったし、まだ動作していない、まだのタイプミス一度私にパースエラーのxD @Carsten – Alex96

+0

を与えます'orderTriple'(私は何とかそこに入っています)が固定されています。これをHaskellにコピー&ペーストしてください(私の場合は' three = id'で) - 最良の推測:別の*問題があります*コード内には表示されません – Carsten

+0

btw:*作業*はコンパイルを意味します。私は暗黙のロジックをテストしませんでした – Carsten

2

物を注文し、それらを3倍することは、完全に独立した操作です。 を注文する関数を書き、に3を掛けないでください。

多くても3回の比較を使用してこれを行う方法が分かりますか?

解析エラーについては、-fwarn-tabsでGHCを実行してください。タブについて警告する場合は、代わりにスペースを使用してください。

+0

これは彼のアプローチに関するコメントであり、質問に対する答えではありません。 – chepner

+0

@chepner、私は答えがありましたが、それは質問の誤読に基づいていました。だからすぐに取り除いた。 Carstenの答えに対するコメントに基づいて修正に関するアドバイスを追加しました。 – dfeuer

+0

@chepner、私はまた懸念を分離すると信じています*最初*。パースエラー、タイプエラー、ランタイムエラー、セマンティックエラーのデバッグのいずれにせよ、より小さい部分を扱う場合は、それを行う方が簡単です。 – dfeuer

2

あなたのコードは私のために細かい動作しますが、あなたはこのようなものからより多くの再利用を取得します:

orderedTriple :: (Num a, Ord a) => (a, a, a) -> (a, a, a) 
orderedTriple = mapTriplet (* 3) . orderedTriplet 

mapTriplet :: (a -> b) -> (a, a, a) -> (b, b, b) 
mapTriplet f (x, y, z) = (f x, f y, f z) 

orderedTriplet :: Ord a => (a, a, a) -> (a, a, a) 
orderedTriplet (x, y, z) 
    | x <= u = (x, u, v) 
    | x <= v = (u, x, v) 
    | otherwise = (u, v, x) 
    where (u, v) = orderedPair (y, z) 

orderedPair :: Ord a => (a, a) -> (a, a) 
orderedPair (x, y) 
    | x <= y = (x, y) 
    | otherwise = (y, x) 
関連する問題