質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Q&A

解決済

1回答

1217閲覧

Haskellでデバッグしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

0グッド

1クリップ

投稿2021/06/14 04:58

haskellで2つの引数の最大公約数を表示する関数を作成したいです。
下記のような関数を作ったのですが、どこかが間違っていて無限ループに入ります
原因を調べるためにデバッグ用のprint(x y)を入れたのですがprintで
Parse error: module header, import declaration
or top-level declaration expected.
というエラーを吐かれました。
どうしたらデバッグできますか?

haskell

1gcdivisor::Int -> Int -> Int--最大公約数 2print(x y) 3gcdivisor x y= 4 if x>y 5 then x--これなくせない? 6 else gcdivisor x y 7gcdivisor x y= 8 if y<0 9 then -1 10 else gcdivisor x y 11gcdivisor x y = 12 if x`mod`y==0 13 then y 14 else gcdivisor y x`mod`y

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

モジュールの直下には import や定義しか書けませんので、ただの式である print(x y) は書けません。

デバッグ用に出力する場合は Debug.Trace.trace などを使用します。

使用方法は下記です。

Haskell

1import Debug.Trace 2 3gcdivisor::Int -> Int -> Int--最大公約数 4gcdivisor x y= 5 trace (show (x, y)) $ -- 例えば「(3, 8)」などと表示される 6 if x>y 7 then x--これなくせない? 8 else gcdivisor x y

ちなみに掲載のコードで一瞥しておかしいところは gcdivisor の1つめの定義しか使われないところですね。

Haskell

1gcdivisor::Int -> Int -> Int--最大公約数 2gcdivisor x y= -- ← すべての引数でここにマッチする 3 if x>y 4 then x--これなくせない? 5 else gcdivisor x y 6gcdivisor x y= -- ← 上の定義にマッチするのでここや下の定義は使われない 7 if y<0 8 then -1 9 else gcdivisor x y 10gcdivisor x y = 11 if x`mod`y==0 12 then y 13 else gcdivisor y x`mod`y

この問題を直すとしたらこうです(まだ他のバグがあると思いますが)。

Haskell

1gcdivisor :: Int -> Int -> Int 2gcdivisor x y 3 | x > y = x 4 | y < 0 = -1 5 | x `mod` y == 0 = y 6 | otherwise = gcdivisor y $ x `mod` y

投稿2021/06/14 05:29

編集2021/06/14 08:42
kakkun61

総合スコア285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/14 09:30

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問