2015年11月9日

common lispにおいての末尾再帰最適化

ループで実装する練習中ですが
どうやらclispのlinuxの実装は末尾再帰を最適化してくれているようです
同じ処理をループと再帰で実装したけど実行時間が同じだったという観測結果からによるものですが
言語仕様的には多分common lispでは別にする必要ないというか規定されていないだけなんだろうなと
多分schemeの仕様には末尾再帰を最適化するような記述があるんだろうな

2015年11月3日

苦手意識からか

関数型を意識しすぎていてループでのプログラミング方法が全くおろそかになっていていまさらながらdoを使うのに非常に苦労してしまっているところがとても歯がゆい
とにかく意味もなく関数型、common lispなのに関数型
どこでだれが言ってたか忘れたけどcommon lispは関数型じゃないって言ってたような
lispって関数型の印象が強いけど印象だけで別に関数型じゃないらしい
末尾再帰も最適化されるわけじゃないみたいだし
多分だけど憶測だけどschemeだったら末尾再帰は最適化されることになってるんじゃないかなと、多分ですが
と言うわけでしばらくループで書く練習に取り組もう
まずはdoが満足に使えるようになることを目指そう

乱数生成のシード

(setq *random-state* (make-random-state t))
を設定すると、起動するごとにrandom関数のシードを設定できる
多分いわゆる現在時刻とかをシードに設定しているのだと思う
指定しない場合、randomは一定の値を返す