トップ «前の日記(2013-05-04(Sat)) 最新 次の日記(2013-05-06(Mon))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2013-05-05(Sun) たんたんと

例えば LISP のゼロ除算

まず、EmacsLisp。

(/ 1.0 0)
1.0e+INF

続いて、clisp。

[1]> (/ 1.0 0)
 
*** - /: division by zero
The following restarts are available:
ABORT          :R1      Abort main loop

それから gosh。

gosh> (/ 1.0 0)
+inf.0

EmacsLisp や gosh では、クォートしてもしなくても 1.0e+INF とか +inf.0 が返った。
無限小は、頭にマイナスをつければいいらしい。

配列を回して

以前書いた、 配列を使った fizzbuzz から、 除算を省いてみた。
そのとき気づかなかったのは、 循環リストを知らなかったから、だろうな。

#!/usr/bin/env python3
 
mylist =  \
  [False, 'fizzbuzz', False, False, 'fizz', \
   False, 'buzz', 'fizz', False, False, \
   'fizz', 'buzz', False, 'fizz', False]
 
for x in range(1,101):
  if mylist[0]:
    print(mylist[0])
  else:
    print(x)
  mylist.insert(0, mylist.pop())

これも配列の順番(要するに、 尻尾を切って 足すので、 回転方向が逆になる)がちょっと間違っていたので、 訂正。
普通([1, 2, 3] なら [2, 3, 1]にする)なら list.append(list.pop(0)) あたりか。

ループ回数とprintf()さらに削減

昨日のコードをもっと汚く変えてみた。
繰り返しの増分を15から30にして、一回のループで30行を 一度に出力するようにする。ループ回数とprintf()の回数が さらに半減したはずである。
流石にこれだけの手入力は面倒なので python3 で "%d\nfizz\n%d\n ... %d\nfizz\nbuzz\n" と、 i, i+2, ... i+26, i+27 を作成し、 printf()に詰め込んでみた。
出力結果のチェックサムを確認し、COREi5 + Mem8GB + Ubuntu12.04 で time ./hogehoge > /dev/null してみる。
でも、結果は数 % 遅くなっただけだった。

ちなみに、普通に近いはずのfizzbuzzとの差は、ここでは 三倍に届かなかった。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。