はてなのpreはすごい

プログラム書く人とはてなとは、どうも親和性が高いらしい。そんな話を以前聞いたことがあって、それはいったいなんでなのかわからずにいたんですが、使ってみてなんとなく納得。たとえば、スーパーpre記法(シンタックス・ハイライト)なんてのを使ってみるとわかるんですが、いやあ、これすごいです。

(defun gr (x n)
  (if (floatp x)
      (if (<= n 2)
          (/ (+ x (/ x x)) 2)
        (/ (+ (gr x (1- n)) (/ x (gr x (1- n)))) 2)
        )
    (gr (* x 1.0) n)
    )
  )

プログラムの断片をこうして公開したい時、シンタックスをハイライトさせようと思ったら結構大変。エディタによっては、公開用にHTMLのタグ付けをしてくれるような機能が付いてたりしますが、けれどスーパーpre記法(シンタックス・ハイライト)を使うと、そういう手間をかけないですむから便利。多分、こういう、あったら便利だなと思うような機能があるんでしょうね、はてなには。私はまだちっともわかっていないわけですが……。

上の関数は、以前Lispにちょっと興味を持ってた時期に書いたもの。平方根を導くためのものです。xをxで割るなど無駄のあるコードではありますが、平方根を導く公式をそのまま、いや、違うな。あれ、一体なんの意図があってそうしたんだろう。忘れました。

xが、その平方根を知りたいところの数。nに入れた数で精度が決まります。たとえば、2の平方根、ひとよひとよにひとみごろ、ですが、これを知りたい場合、(gr 2 2)とすると、1.5が導かれます。(gr 2 5)だと1.4142135623746899が、(gr 2 10)だと1.414213562373095が出ます。多分、後者の方がより精度が高いのだと思いますが、私に数学のセンスはないので、正直よくわかりません。

Lispは結局、入門のテキストを読んだだけで、それ以上先に進むことはありませんでした。関数の再帰呼び出しを理解したくてLispを学ぼうと思って、だから平方根の関数はうってつけだったのですが、けどちゃんと理解できたようには思えないのが、自分のなんとも評価しようのないところです。