実践Common Lisp p253-298

感想。

  • 名前をつけるとき重複を気にしないようにできるっていうのは便利。
  • LOOPってそんなに複雑かなぁ。FORMATが死ぬほど複雑だったように感じてるからあんまり気にならない。
  • CL-PPCREを使えばって書いてあるけどどうするんだろう。とりあえずREPLでそれっぽいファイルをLOADすればできるのかなぁ。
  • …できないなぁ。やっぱりasdfを使うのがよさそうなのでいろいろ調べてみる。
  • こちらを発見。Allegroなのでrequireするだけでたぶんasdfが使えるはず。


  • こんな風にしてみる。


    packages.lisp

    (in-package :cl-user)
    
    ;;; pathnames packageを定義
    (defpackage :com.nrvct.pathnames
      (:use :common-lisp)
      (:export
       :list-directory
       :file-exists-p
       :directory-pathname-p
       :file-pathname-p
       :pathname-as-directory
       :pathname-as-file
       :walk-directory
       :directory-p
       :file-p))
    
    ;;; spam packageを定義
    (defpackage :com.nrvct.spam
      (:use :common-lisp :com.nrvct.pathnames))
    

    定義を書いてるファイルの先頭で、

    (load "/<...>/packages.lisp")
    
    ;;; cl-ppcreを導入
    (require 'asdf)
    (load "/<...>/cl-ppcre.asd")
    (asdf:oos 'asdf:load-op :cl-ppcre)
    
    (in-package :com.nrvct.spam)
    ;;;以下本体
    (defun ...
    

    して、REPLにロードして

    CL-USER> (in-package :com.nrvct.spam)
    #<The COM.NRVCT.SPAM package>
    SPAM> (extract-words "abcde")
    ("abcde")
    SPAM> (extract-words "I can fly")
    ("can" "fly")
    SPAM> (extract-words "The big fat cat eats the student")
    ("The" "big" "fat" "cat" "eats" "the" "student")
    

    で動かせました。よかった。文字列をスペーストークンで区切って単語文字列に分割し、長さ3以上の単語文字列のリストを返すみたいですね。asdfとかloadとかどう書くべきなのかはまた後でちゃんと勉強しよう。

  • 帰無仮説。統計の授業でやったけどこういう風に応用できるのかぁ。フィルターとか認識とかいろんな文脈で使えそう。統計の勉強しなおそうかな。うーん。いやどちらかというと応用の方を勉強した方がいい気がする。何かいい本ないかな。今度探してみよう。
  • 今度spamのリストを拾ってきてちゃんとフィルタできるかどうか試してみよう。今日は眠いからやらない。


ということでやっと実践に入りました。パッケージの使い方がなんとなく分かった気がします。確率、統計についてもうちょっと勉強してみようかな、という気になりました。何か面白いことができそうな気がします。