輪講

研究室で輪講だったんだけど、今日やった部分はいろいろひどすぎる。未定義の用語、変数がぼろぼろ出てくるし、あんまり一般的でない記法を使う。しかも記法があまり統一されていない。
まぁ、なんか一例を出すとだね "the proportion of all those documents in D labeled with Y that are also labeld X" が Conditional Concept Proportion だといい f(D, X|Y) てな表記を使う。うぇ。てか、これ条件付きじゃないよなぁ。(と文脈を抜いて書かれても困ると思うけど)

繰り返し現れる部分文字列の発見

うん、まぁ、Suffix Array を使って「任意部分文字列の頻度計数」なんてことをやっていた自分にとっては、手元のコードを組み合わせて30行ほどのコードを書け足せば、それなりの速度で動くものが出来上がるという状態だったりするんだけど、いきなり回答を書いてしまうのもあれかと思うので、とりあえずさらすのはやめておく。繰り返し回数 k 回以上とか言う指定も可だったり。
なお Pentium M 2GHz で 30 MBytes ほどのテキストに対して処理時間 24 秒程度。理論上はテキストのサイズ n に対して線形時間で求められるんだけど、その手法だと逆に遅くなったりする罠。

Lisp で FizzBuzz

あえて Common Lisp の do マクロを避けて、自分で defmacro してみる。ちょっとしたリハビリ。つうかまだひっ ぱるのか。
Emacs Lisp で書いたけど、Common Lisp でもそのまま動くだろう。たぶん。

(defmacro from-to (var from to &rest body)
  `(let ((,var ,from))
     (while (<= ,var ,to)
       (progn
         ,@body
         (setq ,var (1+ ,var))))))
       
(defun fizzbuzz ()
  (from-to i 1 100
           (let ((mul3p (zerop (mod i 3)))
                 (mul5p (zerop (mod i 5))))
             (cond
              ((and mul3p mul5p)
               (print "FizzBuzz"))
              (mul3p
               (print "Fizz"))
              (mul5p
               (print "Buzz"))
              (t
               (print i))))))