Tips

RubyでBOM付きファイル出力

間抜けながらはまったこと。 $KCODE="u" lines = ["ほげ(X).","ほんげげ(X)."] io = open("result.txt","w") lines.each{|line| io.print(NKF.nkf("-W8 -w16L",line)) } io.close なんてやってて、SWI-Prologで読み込ませると怒られていた。「なんだよーUnic…

PrologでModuleの取り扱い(1)

PrologでModuleを使っていると、Namespaceの扱いがやや面倒になります。たとえば、「data/2」というファクトを処理する述語「process_data/1」というのを、「process」と云うModuleで定義したとします。 :-module(process,[process_data/1]). process(DataNa…

Writing style(書き方テク)

しょうもないことですが、 hoge(X):- foo(X), bar(X). と言うのを、 hoge(X):- foo(X), bar(X), true. と書くようにしておけば、Emacsで書くとき、「Ctrl+k」で述語を行単位で編集しやすいです。「,」と「.」の書き換えが面倒な人へ。

Requireについて

なれてる人は当然のことだと思うけれど、何となく書いてみます。それは、「Require」の書き方。 普通は(本当に普通なのか知らないけれど)、以下のように書きますよね? require 'nkf' class Hoge def utf8(str) return NKF.nkf("-w8",str) end end まあ、P…

Prologの述語の書き方

Prologは「実行速度遅い」、「書きにくい」*1、「古い」*2と、三重苦な言語ですが、非常に便利で面白い言語です。 *1:ただし、慣れたら書けます *2:古いけど新しいとも云う

演算子の定義

リファレンスからのコピペだけど、これさえ知ってればOKかな。 つまり、 Rubyで二項演算子は左結合 単項演算子定義の時、「@」がselfになる(普通のメソッド定義でも使えそうだな。意味ないけど) '[' と ']' のような対が必要な演算子は、引数が間に入る '[…

クラスメソッドの呼び出し制限設定

class Test def Test.foo; end private_class_method :foo end で、クラスメソッド foo は Private になる。普通の privateじゃ駄目だそうな。 追記 リファレンスマニュアルのFAQに載ってたけど、これ、「クラス・モジュールの定義」の章に書くべきじゃない…