M.Hiroi's Home Page

Guest Book Log

[ Home ]

315.Perl/Tk の getOpenFile

投稿者:わたわた - 2004年09月24日 19時33分36秒
ブラウザ:Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3
メールアドレス:tkj@black.interq.or.jp

はじめまして。以前から Perl/Tk には興味を持っていましたが、
Perl 自体の人気に比して、同モジュールについて言及されている
サイトはかなり少なく見える中、こちらのサイトの Perl/Tk memo は
たいへん参考になりました。

それで最近自分でも少しスクリプトをいじっているのですが、
getOpenFile の -initialdir がうまく機能しない件について、
気がついたことがありますので報告させていただきます。

一度開いたディレクトリを再度開けないのはやはり不便なので
いろいろ試してみたのですが、戻り値から取り出したディレクトリ
(の文字列)について、 $dir =~ tr/\//\\/; としてスラッシュを
バックスラッシュに変換後 -initialdir に指定したところ、
getOpenFile でそのディレクトリを開いてくれるようになりました。

ファイル名はそのまま使えるのにディレクトリの方はダメというのも
妙な気もしますが、とりあえずバージョン 800.024 で確認したところ、
変換前は NG 、 変換後は OK でした。

これからも( Perl/Tk だけでなく)様々な言語の講座やお話を楽しみに
しています。それでは失礼いたします。
わたわたさん、はじめまして。
M.Hiroi's Home Page へようこそ。
拙作のページが少しでもお役に立てれば幸いです。

修正方法のご報告、誠にありがとうございます。
なるほど、-initialdir はパス区切り記号をバック
スラッシュにしないと動作しない、というわけですね。

わたわたさんの修正方法で、バージョン 800.023 でも
正常に動作することを確認しました。Perl/Tk memo に
この方法を追記したいと思います。

それでは、これからもがんばりますので、
よろしくお願いいたします。(M.Hiroi)

314.バージョンアップ

投稿者:畑健一郎 - 2004年07月07日 12時43分45秒
ブラウザ:Mozilla/4.7 [ja] (Win98; I)
メールアドレス:xc9k-ht@asahi-net.or.jp
ホームページ:http://www.asahi-net.or.jp/~xc9k-ht/

ふくろうリスプ Ver. 0.3 をリリースしました。

バージョンアップの目玉は多倍長整数とformat 関数くらいで
大したことはありません。

けれども、前のバージョンでは広井さんのページの例題が殆ど
試せなかったのに比べると大分ましになりました。
畑健一郎さん、こんにちは。

多倍長整数のサポートは凄いですね。拙作の X68000 用 Lisp
インタプリタは多倍長整数をサポートしていないので、50! や
100! を計算できる ふくろうリスプ Ver. 0.3 は素晴らしいと
思います。

これからもがんばってください。
(M.Hiroi)

313.Re^2:prologのエラーについて

投稿者:M.Hiroi - 2004年06月03日 23時36分51秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)
メールアドレス:m_hiroi@yahoo.co.jp

M.Hiroi です。No.312 のコメントを訂正します。

標準的な Prolog では、ファイル名に user を指定すると、
端末から述語や規則を入力することができます。
SWI-Prolog での簡単な実行例を示します。
入力の終了は ^D (Control key + d) です。

?- [user].
|: foo( a, b ).
|: foo( c, d ).
|: (ここで ^D を入力)
% user compiled 14.55 sec, 528 bytes

Yes
?- foo( X, Y ).

X = a
Y = b ;

X = c
Y = d ;

No
?-

ファイル名に user を指定できることをすっかり忘れていました。
まだまだ修行が足りないようです(反省)。
user については Prolog のページにまとめておきたいと思います。

312.RE:prologのエラーについて

投稿者:lv426 - 2004年06月03日 10時13分35秒
ブラウザ:Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.7
メールアドレス:the_planet_lv426@yahoo.co.jp

ご教示ありがとうございました。てっきり,述語や規則をそのまま入力してゆけば,それを蓄えていくものだと勘違いしていました。
ありがとうございました。
lv426 さん、こんにちは。M.Hiroi です。

これは SWI-Prolog の仕様で、述語や規則をそのまま入力できる Prolog も
あります。たとえば、他の Prolog ではプロンプトに | が表示されていて、述語や規則を
そのまま入力することができます。そのかわり、質問するときは

| ?-like( taro, X ).

のように ?- を付け加える必要があります。SWI-Prolog はプロンプトが
?- なので、質問を入力する状態しかないようです。

ご参考までに。

311.prologのエラーについて

投稿者:lv426 - 2004年05月31日 12時21分09秒
ブラウザ:Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1
メールアドレス:the_planet_lv426@yahoo.co.jp

こんにちは,はじめまして。お気楽prolog入門を拝読いたしました。
面白かったので,早速ダウンロードをしてやってみたのですが,Undefined procedureというエラーが出てしまいます。何か初期設定を間違っているのでしょうか。以下の通りです。

[Macintosh:~] lv426% /usr/local/bin/swipl
% /Users/lv426/.plrc compiled 0.00 sec, 356 bytes
Welcome to SWI-Prolog (Multi-threaded, Version 5.2.0)
Copyright (c) 1990-2003 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- like( taro, coffee).
ERROR: Undefined procedure: like/2
?-

ただ,次の通りに入力するとエラーになりません(assertの詳しい意味はわかりません)。
?- assert(like(taro, cocoa )).

Yes
?- like(taro,X).

インストールはMac OS X(UNIX)です。
lv426 さん、はじめまして。M.Hiroi です。

Undefined procedure は述語が定義されていないときに発生するエラーです。
like はユーザーが定義した述語(プログラム)なので、プログラムを読み
込まないと動作しません。lv426 さんが使った assert は、述語を定義する
ためのものです。

一般に、ユーザーが定義するプログラムはファイルに保存しておくことが
普通です。そして、それを SWI-Prolog に読み込ませて実行します。拙作の
ドキュメント「Prolog で扱う事実とは?」では、次のように説明しています。

『ファイル like.swi に like( taro, coffee ). だけを書いて保存します。
そして、そのファイルをダブルクリックしてください。すると、SWI-Prolog が
起動して like.swi を読み込みます。これで「太郎はコーヒーが好きである」
という事実が定義されました。』

この説明は Windows の場合で、プログラムファイルの拡張子が swi に設定
されていることが前提です。ファイルの拡張子は SWI-Prolog をインストール
するときに設定することができます。

Mac の場合でも、SWI-Prolog を起動するときにプログラムを読み込ませる
ことができると思います。M.Hiroi は Mac のことはわかりませんので、
SWI-Prolog のマニュアルをお読みくださいませ。

このほかに、SWI-Prolog を起動したあとで、consult や [ ] を使って
プログラムを読み込むことができます。これらの述語についても、詳細は
SWI-Prolog のマニュアルをお読みください。

310.素朴な疑問

投稿者:34 - 2004年05月27日 11時31分14秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 5.16; Mac_PowerPC)
メールアドレス:buchou@ex.isao.net

ハジメマシテ。
些細なことですが、
ここのサイト内の
http://www.geocities.co.jp/SiliconValley-Oakland/1680/xperl/perl10.html
の文中に「アスタリクス」という表記を見つけました。
実際には「アスタリスク」ではないでしょうか?
違ってたらすいません^^;
はじめまして、M.Hiroi です。

ご指摘、ありがとうございます。
さっそく修正したいと思います。

それでは、これからもよろしくお願いいたします。

309.Re:ありがとうございました

投稿者:M.Hiroi - 2004年03月18日 18時23分50秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)
メールアドレス:m_hiroi@yahoo.co.jp

大地さん、こんにちは。

> わざわざMTF5を取り上げて頂いてありがとうございます。

どういたしまして。

> えらく長文ですみません。m(_ _)m

いえいえ、お気になさらずに。
こちらこそ、優れた方法を紹介していただき、感謝しております。

それにしても、mtf5zle, BWT+OC ともに凄い圧縮率ですね。
とくに MTF を使わない BWT+OC にはとても驚きました。
The Large Corpus の圧縮結果も素晴らしいです。
ちなみに、bsrc2 では次のようになります。

(バッファサイズ 4 M byte)
bible.txt 781,856
e.coli 1,148,329
world192.txt 422,195
TOTAL 2,352,380

bsrc2 の場合、e.coli と相性が良いようで、
圧縮率が zzip を上回る数少ないファイルのひとつです。
他のファイルは bsrc よりも圧縮率が良くなりましたが、
zzip や mtf5zle, BWT+OC にはかないません。

mtf5zle と BWT+OC は素晴らしい方法だと思います。
これからもがんばってください。

308.ありがとうございました

投稿者:大地 - 2004年03月18日 9時31分01秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
メールアドレス:kool@mocha.freemail.ne.jp

こんにちは、大地です。

わざわざMTF5を取り上げて頂いてありがとうございます。
M.Hiroiさんのテスト結果でも分かるんですが、MTF5はバイナリに弱いですね。
bsrc2に適用して成績が悪くなってしまったのも残念でした。

今回はアルゴリズムではないのですが、圧縮率を簡単に高める方法を紹介します。
かなり強引なのですが、累積度数の上限を下げ、出現した記号の頻度の増分を+1以上にしてみるという方法です。
こうするとビットシフトが頻繁に起きますので、最近出現しなかった記号の確立は直ぐに下がっていきます。
そうする事で最近の記号のみが高い確立を得られるというものです。
例えば上限を0x100, 増分を5に設定したとすると、
前回ビットシフトが起こった後は頻度の合計が128付近になります。
128/5 == 25 なので、記号を25個符号化する度に1/2になっていきます。
ブロックソートした後のデータは、ある文字が固まって出現する事が多いので、
これがなかなか有効に働きます。

一応、参考までに作成中のソフトの結果を書いておきます。
mtf5zle mtf5 + zleなのですが、グループをトーナメント表のように2分木で分けていき
     節毎に符号化をしながら、葉にたどりついたら次の文字に移るようにしています。
     (あまり効率は良くないのですが、今はあえてこうしています。)

BWT+OC  現在作成中のソフトです。mtfをしないでRLEを通してからレンジコーダにかけます。
     OCはOperation Codeの略で、記号の始まりと終わりを示すEscape Codeです。
     (開始OCをx、終了OCをyとすると)「00202100100」は「x00x202yx1001y00y」になります。
     最初は頻度表をOCのみにしておき、OCが来たらそれに続く文字を別の頻度表2(rest)で符号化し
     メインの頻度表に移します。当然、頻度表2からは外します。
     長期間出ない文字はOCを直後に置いておき、メインの頻度表から移します。
     記号が増える分オーバーヘッドが大きくなってしまうのですが、データによっては効果的です。
     ただ、符号化にえらく時間が掛かってしまうのが難点です。
     解析の仕方次第ですので、圧縮率はもう少し向上しそうです。

        mtf5zle BWT+OC
alice29.txt  42026  42211
asyoulik.txt  38755  38760
cp.html     7570   7658
fields.c    3034   3092
grammar.lsp   1235   1261
kennedy.xls   56735  57430
lcet10.txt   104622  105185
plrabn12.txt  141580  140575
ptt5      48302  48033
sum       12712  13139
xargs.1     1689   1726
[TOTAL]     458260  459070

bible.txt   770246  759184
e.coli     1171959 1179085
world192.txt  419977  419636
[TOTAL]    2362182 2357905
//kennedy.xlsはブロックソートを2回かけています。

えらく長文ですみません。m(_ _)m

307.はじめまして

投稿者:大地 - 2004年03月12日 0時14分48秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)
メールアドレス:kool@mocha.freemail.ne.jp

はじめまして。
ここ一ヶ月ほどデータ圧縮の勉強として毎日見させて頂いています。
おかげで、現在開発中のソフトはBZ2を越え、
Zzipに匹敵する圧縮率となっています。
私のソフトはあまりにこのサイトの依存率が高いので何かフィードバックを
するべきだと思いました。
そこで私の開発した改良型MTF法を紹介します。

M.Hiroiさんが紹介していたBWTzipのMTF2, MTF3は2番目に移動していましたが、
私のは前のシンボルより新しければ0に移動、
そうでなければ1に移動するものです。
とりあえずMTF5と名付けておきます。
(MTF4は効果が無く、ボツになりました)
MTF1, MTF2, MTF3と比べると多くのファイルで圧縮率が良くなると思います。

void mtf5_encode(Uchar *in, int size)
{
int c, i, j, prev=1;
Uchar mtf_table[256];
for (i=0; i<256; i++) mtf_table[i] = i;
for (i=0; i<size; i++) {
c = in[i];
for (j=0; mtf_table[j] != c;) j++;
if (j) {
if (prev<j) {//j==1の場合はj-1==0なのでmemmoveは機能しない
memmove(mtf_table+2, mtf_table+1, j-1);
mtf_table[1] = c;
} else {
memmove(mtf_table+1, mtf_table, j);
mtf_table[0] = c;
}
}
in[i] = prev = j;
}
}
大地さん、はじめまして。
M.Hiroi's Home Page へようこそ。
拙作のページが少しでもお役に立てれば幸いです。

改良型 MTF の紹介、ありがとうございます。
なるほど、これはおもしろいアイデアですね。
さっそく試してみたいと思います。

それにしても Zzip に匹敵する圧縮率とは凄いですね。
私も拙作のプログラムを少しずつ改造していますが、
bzip2 を越えることはできても、Zzip なみの圧縮率を
たたき出すのは難しいと実感しています。

それでは、これからもよろしくお願いいたします。
(M.Hiroi)

306.日経ソフトウェア拝見しました

投稿者:舩本昇竜 - 2004年03月08日 23時51分50秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
メールアドレス:shoryu@maigi.co.jp

M.Hiroiさん、こん○○は。
遅れましたが、日経ソフトウェア(あと、少し前のインターフェイスも)拝見しました。ご活躍はもとより、それによりコンピュータで考えさせることの面白さを多くの人に知ってもらえる機会や場があることに、少しですが、安堵感を覚えてみたり見なかったり。
さておき、実は拙著「コンピュータはどれほど~~」でも○×ゲームを取り上げているのですが、アルゴリズムの方向性が似たような方向を向いていても、実装や解説のアプローチはさまざまでこれもまたおもしろいなあ、と改めて技術系記事の奥深さ・多様さを感じました。
と、いうことでこれからも正統派の解説記事での活躍を期待しております。
舩本昇竜さん、こんにちは。
拙作の記事をお読みいただき、ありがとうございました。

そうですね。昔は、電脳倶楽部や Oh!X のように、パソコン
雑誌でアルゴリズムを取り上げることは普通だったのですが、
最近の雑誌ではあまりみかけないですね。

今回の特集で、アルゴリズムや思考ルーチンに少しでも興味
を持ってもらえたらいいなと思っています。

プログラムの基本はデータ構造とアルゴリズムであることは
今も昔も同じですが、それだけではなく、世の中にはあっと
驚くような凄いアルゴリズム(たとえばデータ圧縮のブロッ
クソート法など)もあります。これからも、いろいろなアル
ゴリズムを紹介できるようにがんばりたいと思います。

ではでは。(M.Hiroi)

305.閉じタグが...

投稿者:Fukai - 2004年02月26日 15時33分22秒
ブラウザ:Opera/7.23 (Windows NT 5.0; U) [ja]
メールアドレス:yasuyuki.fukai@nifty.com
ホームページ:http://homepage2.nifty.com/bugworm/

Hiroiさん、こんにちは。

Tcl/Tk お気楽 GUI プログラミング のページの、
"CONTENTS"のタグが、開始はH2で終了がH3になっているため
以降の文章全てが、斜体で強調、大きいフォントになってます。
とはいえOpera7.23では、ですが。
IE6だと気を利かしてくれるようで、普通に表示されます。
なんか内容には全然影響ないことなんですがOpera派には
結構見づらいことになってしまっているので
修正していただけらと。

では。
Fukai さん、おひさしぶりです。

ご指摘ありがとうございます。
ほかに間違いがないかチェックしたところ、
いくつかのファイルで間違いを見つけてしまいました。
さっそく修正したいと思います。

ご指摘のように IE では正常に表示されるので、間違いに気がつきませんでした。
そうはいっても、IE でしかチェックしていない私の怠慢が一番の原因ですね(反省)。
ほかにもお気づきの点がありましたらご指摘くださいませ。

ではでは。(M.Hiroi)

304.Perl/Tk

投稿者:tez - 2004年02月11日 15時22分39秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
メールアドレス:tez@icntv.ne.jp

最近、PerlでGUIが可能になるということを初めて知り、早速貴ホームページで
勉強させていただきました。とても素晴らしい内容で、感謝・感激!!
今後も是非、頑張ってください。
tezさん、はじめまして。
M.Hiroi's Home Page へようこそ。
拙作のページが少しでもお役に立てれば幸いです。
Perl/Tk は簡単に GUI アプリケーションを作成できるので、
もっと多くの方に使ってもらいたいツールだと思っています。
Tk 関連のコンテンツは更新が止まっていますが、
これからもがんばりますので、よろしくお願いします。
(M.Hiroi)

303.はじめまして

投稿者:ひろ - 2004年02月09日 19時04分57秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
メールアドレス:lamy@saku2.com

はじめまして。たまたまこちらに足を踏み入れました。
X68000ってあの sharp のやつですか? 
現役でマシンを稼働されているのですか?
そういえば、高校生の頃、私が使っていたのが FM-8 でした。6809ツインCPUです。ハンドアセンブラもやりましたね。
X68000は高額で手が出ませんでしたが、当時のことを思い出させてもらいました。楽しいページを拝見させて頂き有難うございました。
ひろさん、はじめまして。
M.Hiroi's Home Page へようこそ。
M.Hiroi は X68030 を持っていますが、最近はほとんど
使っていません。ときどき動かすくらいですね。
最近は、実機よりも X68000 エミュレータを使っている
人の方が多いのではないでしょうか。
(M.Hiroi)

302.ありがとうございます!

投稿者:こぅ - 2004年02月07日 11時32分50秒
ブラウザ:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
メールアドレス:koo@free.japandesign.ne.jp

大学が春休みになって,Lispを学んでみようと思い立ち,
たいへん参考にさせてもらってます。
Cに慣れている(馴らされている?)せいか,
関数の中の変数が再帰で書き換えられてしまってたりで,
戸惑いながらですが,この最高のHPを見ながらがんばります。
本当にありがとうございます!
こぅさん、はじめまして。
M.Hiroi's Home Page へようこそ。
拙作のページが少しでもお役に立てれば幸いです。
Lisp はとても面白いプログラミング言語です。
最初は戸惑うこともあるでしょうが、実際にプログラムを
作って動かしてみると、Lisp の面白さが実感できると
思います。がんばってください。
(M.Hiroi)

301.はじめまして。

投稿者:301 - 2004年01月17日 21時23分49秒
ブラウザ:Opera/7.23 (Windows NT 5.1; U) [ja]
メールアドレス:teacyu@yahoo.co.jp

ひとこと言わせて下さい。
「素晴らしいHPありがとうございます!」
301 さん、はじめまして。
M.Hiroi's Home Page へようこそ。
拙作のページが少しでもお役に立てれば幸いです。
これからもがんばりますので、よろしくお願いします。
(M.Hiroi)

[ Home ]