とりあえず, 241日目

今年も残すことろあと2日.
ということでHDDレコーダーの番組整理をしております.
基本的にやることは, DVDに焼くだけ.
ネギまとかこの前のローゼンとかも焼いた. あとは, オレンジじゃなくてギアスだけ.
来期は, そんなに見るの多くなさそう.



最近他の方のブログによくコメントをつけるようになった.
あとはトラバを送れるぐらい知識が増えればいいんだけどね.
まだまだだめだ. 私が話せる話題ってそんなに多くないし.


そうそう回線だけど, 遅いまま.
光にしようと思うんだけど, あちらさんの仕事始めが1月4日かららしいから, それ以降やなあ.
大きなファイルのダウンロードができないのはイタイ.
でもそれ以外, それほど不便なかったりする. 慣れって怖い.

ブログのフォント

うまい棒blogさんのフォントの設定が綺麗で真似したくなったので, ブログのソース見てパクらせてもらった. 多謝.
うん. これはいい. すごくいい.
デザインセンスある人ってすごい. うらやましい.



これがパクらせてもらった設定.

body{
       font-family:"ヒラギノ丸ゴ Pro W4", "ヒラギノ角ゴ Pro W3", "M+1P+IPAG",
"Verdana Bold", "Verdana", "MS UI Gothic", sans-serif ;
}

他の環境だとどう見えるのかなあ. 今はMomonga Linux + Firefox 2.0だけど.
ここで紹介されてるサイトで確認した限りだとそんなに変わってる風には見えなかったけど・・・.
たぶん, 向こうのシステム上にここで指定しているフォントが無いため, かなあ.


遅くなりましたが, id:hogemさんありがとうございます.
勝手に真似させていただきました.

Common Lisp勉強中・・・ (9)

本で言う第10章, その他の機能.
本は「やさしいLisp入門」.
もう終わりだな.



局所関数.

;; 構文
(flet ((局所関数1 引数リスト1
         局所関数定義1 ...)
       (局所関数2 引数リスト2
         局所関数定義2 ...)
       ...
       (局所関数N 引数リストN
         局所関数定義N ...))
  実行式)

;; letに対するlet*みたいな位置付けの関数.
;; labelsは, fletとほぼ同じだが, 同時に定義する局所関数を相互に呼びだすことができる.
(labels ((局所関数1 引数リスト1
           局所関数定義1 ...)
         (局所関数2 引数リスト2
           局所関数定義2 ...)
         ...
         (局所関数N 引数リストN
           局所関数定義N ...))
    実行式)


多値.

;; floorは小数点以下切捨ててくれる関数.
;; この関数では余りも通常, 発生している.
> (floor 11/3)
3 ;
2/3

;; 関数multiple-value-listを使って, floorの余りを明示的に受け取ってみる.
;; 結果は, リストで返される.
> (multiple-value-list (floor 11/3))
(3 2/3)

;; 多値の生成.
;; 最初の10が主となる値. 15は多値の残りである.
> (values 10 15)
10 ;
15

;; 関数で多値を返す.
;; - リストを関数の最後で返す(もしかしたら多値と言っちゃまずいかも).
;; - 関数valuesを使って複数の値を返す.
;; valuesに何も引数を与えないと, 値を何1つ返さない関数が定義できる.
> (defun test-tachi () '(1 2))
TEST-TACHI
> (test-tachi)
(1 2)
> (defun test-tachi () (values))
TEST-TACHI
> (test-tachi)

> (defun test-tachi () (values 5 4))
TEST-TACHI
> (test-tachi)
5 ;
4

;; リストを多値として返す.
> (values-list '(a b))
A ;
B



大域脱出.

;; 構文
(catch タグ 式 ...)   ; 設定したタグへthrowされた大域脱出を捕まえる.
(throw タグ 値 ...)   ; 指定したタグを持つcatchに向かって大域脱出を行う.

;; 本のサンプルをまんま.
;; 与えられたリストに数値以外のものがあったならば, nilを返す式.
;; リスト(1 2 3 f 5)の中に数字以外のもの「f」があるので, 例外が投げられてnilが返る.
> (catch 'myerror
        (mapcar #'(lambda (mydata)
                    (if (numberp mydata)
                        (+ 1 mydata)
                      (throw 'myerror nil)))
                '(1 2 3 f 5)))
NIL

;; どんなことがあろうと確実に処理させたことを記述する
;; 「保護する式」の途中でthrowされようと, 「特別な処理」は確実に実行される.
(unwind-protect 保護する式 特別な処理 ... )


これで「やさしいLisp入門」はおしまい.
11章は読んだけど, 特にメモることはないなあ. clispの使い方だし.
あとは, どうすればいいんだろう?
標準で含まれている関数の使い方とか書いてあるマニュアルないのかな. 全容が見えない.

色々情報収集. 上手いタイトルが思い浮かばない

色々情報集め中. なんかかなり楽しくなってきた.
ただ日本語の情報は, そんなに多くないね. どっかで英語に触れる必要がある.
簡単に検索して情報を集めてみた.

http://b.hatena.ne.jp/khiker/lisp/

2chにも言ってみたけど, 処理系は色々あるみたいね.
スレによるとclispは, バーチャルマシンらしい. ということはネイティブコードには落とせないのかな?
2chのオススメは, SBCLってやつ. その内使ってみるかな.



コマンドclispへ拡張子.lispファイルを渡して, 実行するサンプルを調べて作ってみた.

;; my main
(defun main ()
  (print *args*))

(main)

関数名は, mainである必要はどこにもない. 別にtestでも何でもいい.

$ clisp testfile.lisp

("a" "b" "c") 

こんな感じで表示されるはず.
「*args*」が引数をとる変数らしい.


こいつをコンパイルしてみる.

$ clisp -c testfile.lisp

これでエラーがなければコンパイルできて, 「testfile.fas」, 「testfile.lib」の2つが生成されているはず.
testfile.fasコンパイルされたファイル.



ついでにshebang書いた場合.
自分の環境だと, clispの場所はこんなとこ.

$ where clisp
/usr/bin/clisp

/usr/bin/以下にあるらしい. よって, shebangは, こんな感じでOK.

#!/usr/bin/clisp

;; my main
(defun main ()
  (print *args*))

(main)

あとは, ファイルに実行権限を与えてやれば, ファイルを直接指定してやるだけで実行できる.

$ chmod u+x testfile.lisp
$ ls -l
合計 1
-rwxr--r-- 1 khiker khiker 296 12月 30 16:22 testfile.lisp*
$ ./testfile.lisp 1 2 3

("1" "2" "3")

2chの鯖移転に伴ってFoxage2chの設定を書き換えた

専門板のスレの管理をFoxage2ch使ってやってんだけど, Linux版とかUNIX版とかがどうも鯖移転したらしく,
Foxage2chでの更新が上手くできなくなってしまった.



そこで調べてみたら, どうもFoxage2chの設定そのものをエディタで書き換えてしまえばいいらしい.
具体的には, 「~/.mozilla/firefox/xxx.default/foxage/」にあるfoxage2ch.rdfファイルを書き換える(xxxは各自のプロファイル).
これはLinuxでの話. Windowsだとまたこのプロファイルフォルダの位置が違うはず.


書き換え方は, 超強引.
以前のURLと現在のURLを置換してやる.
例えば, プログラム技術版ならば, 「http://pc8.2ch.net/tech」が「http://pc10.2ch.net/tech」に変更されている.
この場合, 私は, Emacsを使ってM-x replace-string [RET] pc8 [RET] pc10 [RET]で一気に置換してしまった.
M-x query-replaceは一々尋ねられるのが面倒だから, 今回は使わなかった.
こんな風に移転したのを全部書き変えてやったら, ちゃんと更新されるようになった.



それにしても, 面倒だ.
拡張機能側で何か対応してくれればいいのに.

/binフォルダを見てたらexとかいうのがあった

ラジオ聞きながら, /binとか/usr/bin見たり, 適当なコマンドにwhatisを実行してみてたりしてたら見っけた.

$ file /bin/ex
/bin/ex: symbolic link to `vi'

実体は, vi?
何だろう?これ?



困ったときのWikipediaで調べてみた.


viはラインエディタのexを祖先に持ち、多くの特徴を受け継いでいる。

ラインエディタでは、目的の行を抽出、編集、更新というサイクルで編集を行う。現在主流のスクリーンエディタと異なり、内容の閲覧/編集はそれぞれ独立した機能であり、インタラクト(対話的)に動作しない。しかしそれだけでは利用が困難なので、exでは「特定のパターンにマッチする行内で内容を置換」「外部コマンドによるフィルタ」などのプログラムインタプリタ的な支援機能が充実している(sedは同様の背景をルールマッチ型に解釈したフィルタ記述インタプリタである)。

ふえー, viの先祖なんだ.
sedみたいなものだったのかな?よく分からんが.

追記

つーか, 実体がviのものって多いな.
rviって何だよ. rviewとか. 何でこんないっぱいあるんだ???