0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

再帰関数をデバッグしようとしたらDebug.logの表示が逆だった

Last updated at Posted at 2020-08-30

メモです_φ(・_・


hoge x y =
    let
        dx =
            Debug.log "x" x

        dy =
            Debug.log "y" y
    in
    if x + y < 20 then
        hoge (x + 5) (y + 2)

    else
        ()
> T.hoge 1 2
y: 2
x: 1
y: 4
x: 6
y: 6
x: 11
y: 8
x: 16
() : ()

このようなときズラーッとくっついてしまって見にくいなぁと思い、空行で区切ってみたのですが変なふうに区切られてしまい、それはDebug.logの表示が逆順であったりするからだと気づきました。

どうやって解決するのがメジャーな方法なのかわからずいい方法が知りたいのですが、ちょっとしたコードで見やすくはなりました。

type alias DBG =
    String


nextD : DBG -> DBG
nextD dbg =
    "    " ++ dbg


printD : DBG -> String -> a -> a
printD dbg str =
    Debug.log (dbg ++ str)


printDS : (a -> b) -> DBG -> String -> a -> a
printDS f str dbg a =
    printD dbg str (f a)
        |> always a

hoge x y dbg =
    let
        dx =
            printD dbg "x" x

        dy =
            printD dbg "y" y
    in
    if x + y < 20 then
        hoge (x + 5) (y + 2) (nextD dbg)

    else
        ()
> T.hoge 1 2 ""
y: 2
x: 1
    y: 4
    x: 6
        y: 6
        x: 11
            y: 8
            x: 16
() : ()

他にも


_ = Debug.log "x" x
_ = Debug.log "y" y

このように変数にいれなければ、逆順にならなそうでした。

追記: みやもさんに他の方法を教えてもらいました。
ありがとうございます。


hoge x y =
    let
        dx =
            Debug.log "x" x

        dy =
            Debug.log "y" y
    in
    if x + y < 20 then
        (Debug.log "---------" hoge) (x + 5) (y + 2)

    else
        ()

(Debug.log "---------" hoge) (x + 5) (y + 2)
思いつけませんでした。


hoge x y =
    let
        _ = Debug.log ""---" "---
    in
    let
        dx =
            Debug.log "x" x

        dy =
            Debug.log "y" y
    in
    if x + y < 20 then
        hoge (x + 5) (y + 2)

    else
        ()

let...in let...in
これも思いつけませんでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?