2010年7月20日火曜日

今日の無題

Debian4.0終了のお知らせ(遅)

半年くらい前にインストールしたcoLinuxを久々に 引っ張りだしてみたら、どうやら Debian-4.0r0-etch.ext3 ではディストリビュ ーションのバージョンが少々古くなってしまったらしい。

apt-getが使えないと色々困るので Debian -- ディストリビューションアーカイブ に書いてあるのを参考に /etc/apt/sources.list を書き換える必要がある。

    deb http://ftp.riken.jp/Linux/debian/debian-archive/ etch main contrib non-free
    deb-src http://ftp.riken.jp/Linux/debian/debian-archive/ etch main contrib non-free

もしくは素直にSourceForge.net からDebian 5.0 Lennyを持ってきたほうが賢いのかもしれないけど。

参考

2010年5月31日月曜日

[Emacs]sha1-file

舌足らずなブログ: あれ? がようやく解決したのでメモ。

こっちもxyzzyのエンコーディング指定と同じミスでした。
sha1.elはそれなりに長い文字列を受け取ると外部プロセスに処理を投げるので、その時の入力をバイナリ指定にしないといけないらしい。

(defun sha1-file (filename)
  (require 'sha1)
  (let ((coding-system-for-write 'binary))
    (with-temp-buffer
      (insert-file-contents filename)
      (sha1 (buffer-string)))))

ちなみにEmacs内部で処理する場合はエンコーディング指定は要らない。

(let ((sha1-use-external nil))
  (with-temp-buffer
    (insert-file-contents FILENAME)
    (sha1 (buffer-string))))

2010年5月19日水曜日

[newLISP]今日の無題

自作したnewlisp.elの挙動がおかしかった原因が少し分かったのでメモ。

newlispのREPLはデフォルトで行編集ライブラリ(readline)が使えるが、 複数行を入力する場合は[cmd]~[/cmd]タグでS式を囲まなければいけないのが newlispの面倒な仕様。

newlisp.elの newlisp-eval関数はその辺を考慮してプロセスに文字列を 送るようにしているのだけど、なぜか効果が無いようでREPLバッファに 入力が溜まってしまう現象がよく起きていた。

2010年2月9日火曜日

newLISP基礎文法最速マスター

待っていても誰も書きそうにないので自分で作りました。

これは何?

Lisp風スクリプト言語newLISPの文法一覧です。(→newLISP公式ページ)
S式について多少でも知っている人は他の処理系と比較してもよし。
そもそもS式を知らない人はLisp入門にしてもよし。 (先に他の有名なScheme処理系やCommon Lispに手を出す方が無難ですが)
newLISPの簡易リファレンスとして利用できるかと思います。ただし無保証です。

2010年2月1日月曜日

[xyzzy]zone.l移植

Emacsのジョークプログラムzone.elを移植したのでGitHubに置いておきますね。

壁||´・ω・`)っ kosh04/xyzzy-lisp/site-lisp/zone.l

※コード内の説明文はシフトJISなのでブラウザから開くとたぶん文字化けしますん。

2010年1月30日土曜日

Scheme コードバトンに参加

次回3月予定のShibuya.lispに向けて、現在面白げな企画が進行中です。

Shibuya.lisp に向けて Scheme コードバトンするのはどうか?
第1回 Scheme コードバトンのお知らせ - ひげぽん OSとか作っちゃうかMona-

;; ■ これは何か?
;; Scheme のコードをバトンのように回していき面白い物ができあがるのを楽しむ遊びです。
;; 次回 Shibuya.lisp で成果を発表します。
;; Scheme 初心者のコードを書くきっかけに、中級者には他人のコードを読む機会になればと思います。
;;
;; ■ 2 つのルール
;;
;; (1)自分がこれだと思える変更をコードに加えて2日以内に次の人にまわしてください。
;; 「人に優しい」変更なら何でも良い。1文字の変更でも可。
;; 「人に優しい」とは例えば、次の人が読みやすいコードを書くなど。
;; コードを削るのもあり。
;;
;; (2)次の人にまわしコードが変更されるのを"見守る"。
;; この説明書きを含めてバトンが伝わった事を必ず確認してください。
;; 止まっていたら助けてあげてください。

自分もg00001さんのバトンから派生したCL版を弄らせてもらいました。ライブラリまわりの導入に手間取ったのがちょっと痛かったかも…とりあえずテスタくらいの役割は果たせたんじゃないかと思います。

それと、newlispも一応lisp風スクリプト言語ということで大元となるhigeponさんのバトンからforkしてnewlisp版も作ってみることに。
こちらはCLやSchemeと違って正しいコーディングスタイルが分かってないので、つらつらと手の赴くままに。

動作例は以下

[~/code/newlisp]$ newlisp scheme_button.lsp http://gist.github.com/273424.txt # 辞書ファイルをURLから取得
allowance: 割当量 [y/n/q]? y
defect: 欠点 [y/n/q]? n
errand: 使いっ走り [y/n/q]? y
exploration: 探査、探検 [y/n/q]? y
heap: 積み重ねた物 [y/n/q]? y
;; saving dict...done
[~/code/newlisp]$ cat words.txt
(allowance "割当量" 1 0)
(defect "欠点" 0 1)
(errand "使いっ走り" 1 0)
(exploration "探査、探検" 1 0)
(heap "積み重ねた物" 1 0)

scheme版と同様にコマンドラインからの利用で、 newlispバイナリ一つあれば動作するようになっているとは思います。

CL版弄った時間もあわせると2日以上かかっていますがまあ気にしない。