この関数は約2000ステップ以上のスタックオーバーフローを引き起こします。メモリを少なくするために簡単に最適化できる方法はありますか?Lisp再帰的ランダムウォークを最適化する
(defun randomwalk (steps state)
(displaystate state)
(if (equal steps 0) nil
(if (solved? state) t
(let ((nrmlstate (normalize state)))
(randomwalk (- steps 1) (applymove nrmlstate (nth (random
(length (getallmoves nrmlstate))) (getallmoves nrmlstate))))
)
)
)
)
より良いコード書式と再現可能なテストケースを使用して、質問を改善することができます。このStackoverflowのヘルプを参照してください: –
ライナーは言うように、あなたのコードのフォーマットは非常に悪いので、それが何であるかを見ることができません(テストケースの欠如も役に立たない)しかし、この関数をコンパイルする大部分の実装では(しかし、言語で保証されていない*)、スタックを消費しないプロセスになるはずです。 (一部の実装ではコンパイルのステップが必要ないかもしれません) – tfb