プロが教える店舗&オフィスのセキュリティ対策術

最近lispを勉強し始めたのですが、
Newton法を使った平方根を求めるプログラムがうまく書けず困っています。

(defun isqrt(n &aux x0 x1)
(setq x0 (expt 2 (floor (integer-length n) 2)))
(loop
(setq x1 (floor (+ x0 (floor n x0)) 2))
(print x1)
(cond
((= x0 x1)(return))
(t (setq x0 x1))))
x0)

このように書くとnの値が3や8や15の時にx0、x1の値が無限に出てきてしまいます。
何でおかしいのでしょうか?
直すにはどうしたら良いですか?

わかる方教えて下さい。
よろしくお願いします。

A 回答 (1件)

> 何でおかしいのでしょうか?


下から3行目の終了条件が不正です。
誤 =
正 <=


> 直すにはどうしたら良いですか?
0. 直す前にインデントを付けた方が良いです。見にくいです。
1. ステップ実行してみればすぐ分かります。
2.上記”何でおかしいのでしょうか?”の指摘内容を反映してみてください
    • good
    • 0
この回答へのお礼

終了条件が不正だったのですね。
見直しても気付けなかったので本当に助かりました。

見にくくなってしまって申し訳ないです。インデントをつけておきたいと思います。
ご指摘と回答ありがとうございました。

お礼日時:2014/12/01 18:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!