[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 05/09 19:10 / Filesize : 51 KB / Number-of Response : 158
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Prologサーバー



1 名前:Prolog mailto:takao@ozaki.name [04/12/10 16:02:13 ID:???]
Prologサーバー網の構築に向けて、
・ Prologサーバーとはなにか
・ Prologサーバーの共通仕様、機能
・ プログラミング技術
・ セキュリティについて
論じましょう。


2 名前:DNS未登録さん mailto:sage [04/12/10 16:31:46 ID:???]
------------このスレッドは終了しました--------------

3 名前:toto mailto:t_ozaki@nichibei-sekiyu.co.jp [04/12/12 16:23:51 ID:???]
ソケットとstream通信の機構があればどんなPrologでもサーバーの
構築は簡単ですが、問題は、
サーバー側にどんな資源(述語)が定義済みであるかがわからない。
それを探るというのは現実的でない。やはり、XMLのDOMファイル
みたいなものを第一段して、送り込んでおかないとうまくいかないの
ではないか。そこら辺のプロトコルをどう設定するかですね。


4 名前:DNS未登録さん [04/12/13 07:08:55 ID:3i5XTSef]
以下質問ではこれこれの述語を使います。あなたのサーバーに未定義のときは
どこそこからロードしなさいとURLでも渡す。
それより、まず共通ライブラリを決めて、お互いにPrologサーバーモジュールの
中に定義することとの方が先でしょう。


5 名前:DNS未登録さん [04/12/13 16:28:48 ID:3i5XTSef]
Apacheの代わりにPrologでWebサーバー書いてるのだけど
そういうのはPrologサーバーって云わないの?

6 名前:Prolog mailto:takao@ozaki.name [04/12/13 19:45:06 ID:???]
httpプロトコルも当然ありえますね。すこし重いけど。
ブラウザもPrologで書いたらおもしろそう。


7 名前:DNS未登録さん mailto:sage [04/12/16 11:03:52 ID:???]
Prologは大学でして以来一度も触れてない。なつかし〜
けど利点はあるの?

8 名前:Prolog mailto:takao@ozaki.name [04/12/16 17:09:16 ID:???]
LISPなどもそうですが、基本的にインタプリタの系です。
例外なくどの処理系もそうなっていて、?- 以下の質問に答える、
作りになっています。
既存のプログラムもその形式に沿うように短く作られていますから、
入力と出力をソケットにするだけで、PtoPでお互いに乗り入れられます。
あえて、Prologサーバーといい、自宅サーバーのカテゴリーの
中で話題にしようとするのはそんな性質があるからです。
もう一つ追加すると、オンメモリーのリレーショナルデータベースで
あるという点も、お互いが情報を開示しあうためには最もふさわしい
系であるという根拠になるように思われます。



9 名前:DNS未登録さん mailto:sage [04/12/16 17:38:45 ID:???]
>>8
Prologなんてもう記憶のかなただが...

> オンメモリーのリレーショナルデータベース
これだけで十分ギャグだよ。運用できないじゃん。
Prolog使うと楽に解ける問題はあるだろうけど、それなら
web serverをI/Fにすればよい訳で。

どうしてもやりたいなら、Prologサーバでしかできない応用例を
一つでいいから出してみな。

#クラスタリングして並列Prologエンジンなんつー化け物なら
 作る意味もありそうだが、それは自宅サーバ板で話す話題じゃ
 ないだろ。


10 名前:Prolog mailto:takao@ozaki.name [04/12/16 18:47:02 ID:???]
> これだけで十分ギャグだよ。運用できないじゃん。
鋭いですね。実際、UNIX(LINUX)のサーバでfork()で処理すると
セッション終了とともにデータベースの書き換えが無効になってしまう。
このため、バックエンドにもう一つデータベース用のPrologを立ち上げる
ことになります。 >8 で書いたように単純にはいきませんね。
ネットワーク上でのデータの一貫性などできようはずがありません。

ただ、リレーショナルデータベースとRDBMSとは概念がずれます。
集合論に基づくデータモデルがリレーショナルデータベース、
Prologはそれを含んでいます。二項モデルや連想三つ組など
自分独自のデータモデルや環境を簡単に実現できることに
少々は意義がありましょう。
セキュリティ、信頼性とかを一切無視して、ネットワーク上で
お互いの資源にもぐりこんで使いあいましょう、という話には
Prologはぴったりですよということです。
アナーキーなネットワークのモデルを担えるかも、ということです。




11 名前:9 mailto:sage [04/12/16 20:50:57 ID:???]
>10
象牙の塔の中で言ってる分には別に構わないけど、それで何か
意味があるのかい?
一時期流行ったmobile agentも結局実用にならなかったじゃないか。
Prologインタプリタをcgiで動かす以上の意味があるとは到底思えない。

12 名前:Prolog mailto:takao@ozaki.name [04/12/16 23:16:52 ID:???]
>11 うーん、実用になるかどうかですか。
参加する人がいるか、いないかでしょ。

Prologに拘るのは構造のないフラットなモデルでやりたい、という
ことです。


13 名前:Prolog mailto:takao@ozaki.name [04/12/17 11:48:37 ID:???]
>9-11 実用(応用)ということになると、
Prologは記号処理言語なので、事務処理向きですね。
Adobe PhotoShopのようなソフトがPrologで書き直されることは
絶対無い。そういう意味で汎用言語とはいえないでしょう。
Prologサーバと観点からすると、スクリプト言語として、で十分
だと思います。複雑なことはいつでも書こうと思えば書ける。


14 名前:9 mailto:sage [04/12/17 13:02:51 ID:???]
>13
ということは、"Prolog Server"は不要って事だね。
単にサーバーにProlog Interpreterが載っていればOKなんだろ?

15 名前:Prolog mailto:takao@ozaki.name [04/12/17 13:40:07 ID:???]
>14 サーバの全てをPrologで書いてある必要はないです。
"Prolog Server"の定義がそういうものだとしたら、御免なさい、ですね。
そういう部分から議論したいと思ってこのスレを立ち上げたのですが、
私はPrologの項の形式で質問して、答えとしてPrologの項を返すことが
できれば、"Prolog Server"と考えていいと思っています。
ApacheのCGI経由でも一向に構いません。軽い重いはありますが。
項(=論理式)の形式で返せないとなるとPrologのありがたみが
でません。条件はそこです。
実は、C++やPerlで書かれていても、項の解釈ができて、
その形式で答えることができるなら、実装がどうであれ、
立派にPrologです。




16 名前:9 mailto:sage [04/12/17 13:43:35 ID:???]
>15
だからね、世の中や学術用語では、そういうのはPrologサーバとは
言わないの。

名称問題はこれでいいとして、Prologって何に向いてるの?専門用語
を使わずに説明してごらん。

17 名前:Prolog mailto:takao@ozaki.name [04/12/17 18:25:17 ID:???]
>16 私は15年以上事務計算プログラムをPrologで書き続けてきている
ので、事務処理には一番だと思っています。

構造がないとか云ったのとは矛盾するかもしれませんが、
木構造で管理できる部、課、係等の情報を扱うには向いています。
本来集約演算が苦手ですが、真っ先にそういう述語から書きますから、
特に不自由することはありません。
中小企業で管理者が直接プログラミングして、可能な限り仕様書を
書かない(せない)時、圧倒的なコストパフォーマンスを発揮します。
既知のやりたいことをただ「述べれ」ばよいだけですから。
大企業向きの言語ではないですね。

*********************************************************
SMTP,POP3,TELNET,HTTPに対応したサーバをPrologで書いて複数
ノードで分散して運用していますが、世界中にそういう環境を
期待するのは現実的でないですね。


18 名前:Prolog mailto:takao@ozaki.name [04/12/18 07:13:56 ID:???]
Prolog同士で、サーバ、クライアントを構成することは、
現在、ほとんどの処理系にDEMOとしてTCP/IP経由のものが
ついているので、Prologユーザはやってはみたことがあります。
しかし、外部に公開するとなると、モジュールに関する仕様、
データのロードに関する技術等、整備しておかなくてはならない
部分が多々あります。
クライアント独自のデータベースで実行されるのか、共用環境で
実行されるのか、定義域の宣言や切り替えが必要でしょう。
外部ノードの参照に関する述語自体標準はありません。
?- .... ,node101 :: testpredicate(A,B), ...
のような形式が候補に挙がるでしょうが、既にモジュール管理に
使用している処理系もありそうです。
一般にPrologクライアントから要求Pを出すときには全解探索を考慮して、
  findall(P,P,L),
のように包んで要求します。上の記法を使えば node1 :: findall(P,P,L),
サーバから解のリストLが返されますから
  member(X,L), でXに一つづつ解を取り出すことになります。

これが普通のやり方ですが、これを標準としてよいか。
こんなことを議論したり、確認したいということです。

自分の環境を自由に利用させることは、エロサイトを立ち上げることより
遥かに危険なことです。そんなことを相手にしてもらえるカテゴリーを
探したら、自宅サーバ以外になさそうだったのでこの板をここに
作ってみました。




19 名前:Prolog mailto:takao@ozaki.name [04/12/18 09:33:06 ID:???]
自己レス
>サーバから解のリストLが返されますから
失礼、サーバから返されるのも、findall(P,P,L)です。ただし、
変数LがリストLとして具体化されています。

20 名前:9 mailto:sage [04/12/22 11:10:14 ID:???]
>>17-19
なんだか言ってる事が思いっきり眉唾物なんだが、
本当にそんなことやってるなら、論文書けよ。研究会発表
でも構わんからさ。



21 名前:DNS未登録さん [2005/11/08(火) 21:13:50 ID:+ggu+g89]
Prologサーバーでググったらここにきた。こんな板にこんなものがあるとは。
それにしても偏ってるというか、怪しいというか。Telnetサーバーって
なんのことかね。
でも、P2Pの感覚でPrologをお互い乗り入れるというのはおもしろい。
マジでレスすると、
こういうことをやるには、Modula-2のMonitorのような機構が必要で
けっこう難しいと思っていたが。

22 名前:DNS未登録さん mailto:sage [2005/12/09(金) 01:57:32 ID:???]
PrologでCGI作ったら面白そうだ

23 名前:DNS未登録さん [2005/12/13(火) 11:28:08 ID:RlHAddgo]
質問です。ここに書かれているPrologサーバーというのは
プログラム板の「Prologでまったり」スレの中にでてくる
Prolog共用データベースのことだと考えてよいのでしょうか。


24 名前:Prolog mailto:sage [2005/12/13(火) 13:14:27 ID:???]
はい。私はLinuxなのですが、これでTelnetか何かでPrologを
起動し、利用するとします。この環境を外部から割り込んできて
利用できるかというと、否です。利用者の主体はどうしても
このような環境にあり、共用データベースは時に登録すると
いうことになりがちですから、不本意です。しかし、これらのマルチユーザー、
マルチタスクの一つ一つが交信の対象になるためには、個々のProlog本体に
外部からの割り込みを受け入れる機構が必要になります。あるいは
Subgoalの実行ごとにSocketの着信を検査するというような仕組みが
必要かも知れません。
>>21の最後の部分はこのことだと思います。(私はModula-2を知りませんが)

このような複雑なPrologの拡張なしに、サーバーを立ち上げてみようと
いうのがここでの私のやり方です。


25 名前:DNS未登録さん [2005/12/18(日) 19:39:18 ID:5fzl9ZgL]
もうちょっとまとめてから書いてくれない?

26 名前:DNS未登録さん mailto:sage [2005/12/25(日) 20:27:28 ID:???]
よくわかんないけど、メッセージをふつうに構造体で表現すればいいんじゃまいか。

27 名前:DNS未登録さん mailto:sage [2005/12/26(月) 06:51:15 ID:???]
構造体の解析をいちいち書かなくても良いように、
項(構造体)の解析系が強力なPrologを使いましょう
という話なのですが。

28 名前:DNS未登録さん mailto:sage [2006/03/14(火) 10:06:53 ID:???]
>>26
サーバーの振る舞いは
ソケットに得た情報を
1 ストリームから読み込みアトム(文字列)とする
2 そのアトムをparseしてPrologの項とする
3 この項をcallする(Lispのeval)
4 (論理変数が具体化された)項を文字列化する
5 ストリーム-ソケットを介してこの文字列を返送

となります。
受け取り項(構造体)のタイプは無限で、これに対処できて
いるのはparseのおかげということになります。


29 名前:DNS未登録さん mailto:sage [2006/03/14(火) 18:08:03 ID:???]
これまで、サーバーはクライアントの質問に答えるだけでした。
これを質問に対してサーバーが質問し返す仕様に変更してみましょ

%クライアント側 w3prolog/2は既に定義済みとします
対話質問(Network,Port,_質問) :-
w3prolog(Network,Port,対話(_質問,_応答)),
call(_応答).
myhostname(client1).

%サーバー側 shs/2はshellの標準出力からリストを構成する述語
対話(_質問,_応答) :-
対話応答項(_質問,_応答),
call(_質問).

対話応答項(pwd(_),(myhostname(client1),system(cal))).
pwd(X) :- shs(pwd,X).

%運用例 クライアントがclient1であることを確かめてから、
calはクライアント側資源として実行されます

?- 対話質問(server1,54211,pwd(X)).

3月 2006
日 月 火 水 木 金 土
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

X = ['/usr/prolog'].
yes.
?- クライアント側にも応答質問項/2を定義すれば
会話を継続する仕様へ変更することも簡単です。


30 名前:DNS未登録さん [2006/03/16(木) 11:36:53 ID:W4o4bbe7]
何が書かれているのかさっぱりわかりません。
解説つきでお願いします。



31 名前:DNS未登録さん mailto:sage [2006/03/16(木) 21:25:08 ID:???]
>>30 このスレは、
1・・自分のProlog実行環境の他にProlog共用データベースを立てる
2・・この共用データベースに対してPrologクライアントは自由に
質問し、解を得ることができる。
3・・この質問-回答におけるメッセージ交換をPrologの項で行う。

このようなネットワークを築くための基礎について議論するところです。

>>29は質問-回答系がすでに築けているとして、
質問に対して、回答を返すほかに、サーバー側から、更に質問をプッシュし
この質問のクライアント側での実行を約束事とすることにより、
クライアントの環境に応じて、回答の条件付けをする可能性を図るものです。
たとえば、
「あなたの環境がこれこれの場合は私の回答は有効だが、そうでない場合は
偽と見なしなさい。」というようなアサーションなどが考えられます。

内容の解説は順次述べます。



32 名前:DNS未登録さん [2006/03/21(火) 05:57:26 ID:LdCGxyZg]
サーバー名と質問(メソッド?)の間が::で区切られて
いますが、なぜ普通に:ではだめなのですか。


33 名前:DNS未登録さん mailto:sage [2006/03/21(火) 15:41:33 ID:???]
>>32
現在のPrologの規格(たとえばISO規格)では、
A:BだとAモジュールのB述語の意味となり、ここでの
サーバーの意味とは異なります。

Aをクラスと考えても、モジュールと理解しても、ノードと
解釈しても、意味的には近いと思いますが、処理系に
モジュールと先に解釈されてしまうと仮にモジュール定義
がされていなくても、エラーになってしまうのが普通です。

それで、モジュールと衝突しないようにオペレータを::に
してあります。

34 名前:DNS未登録さん mailto:sage [2006/03/27(月) 16:17:25 ID:???]
この環境だと、エージェントを
送り込んだり(受け入れたり)、
それを自由に移動させたりできる
ように思いますが、
ライブラリやサンプルプログラムは
ありますか。



35 名前:DNS未登録さん mailto:sage [2006/03/29(水) 20:28:56 ID:???]
>>34
エージェントについては詳しくありません。
一つ言えることは、イントラネットのように
管理者が端末の起動状態を完全に把握している場合は
よいのですが、このネットワークのように
何時、各ノードが電源offになるか解らない環境では
駐在型のエージェントというのは難しいのでは
ないかということです。長期間にわたり
他のノードでサンプリングを続けるためには、
そのマシン内でバッチタスクとして動作しなくては
なりません。セキュリティの問題もあり、
このようなことが安定して行えるかどうか疑問です。

36 名前:DNS未登録さん mailto:sage [2006/03/30(木) 09:01:10 ID:???]
サーバーに対し、
?- (reconsult(Local::File),program(Goal)).
と言う質問をすることによって、
クライアントのファイルをサーバー側にreconsultして、
指定のGoalを実行するということはできます。

このスレを立てた理由のひとつとして、
このとき、reconsultされる述語が既にサーバーに
定義されている場合の処置について規定を定めたい、
ということがあります。
つまり、現在はこの点が決まっていません。

エージェントの動作としてはこのGoalから始まる
サンプリングの中で、local(クライアント)側のサーバーに
対して蒐集したデータをassertすることで、エージェントを
送り込んだクライアントとは非同期に動作することが
できます。


37 名前:DNS未登録さん [2006/03/30(木) 09:26:47 ID:PDsgvxxv]
>>36Goalの実行終了をクライアント側が待ち続けることになってしまいませんか。

38 名前:DNS未登録さん mailto:sage [2006/03/30(木) 09:37:31 ID:???]
そうですね。
述語program/1 は一般にProlog処理系は起動後の
最初の案の実行を :- program. と規定しています。
この規定を模して作った述語です。
それで、本当はprogramにしたかったのですが、
本来の述語と衝突してしまうため、利用者が自由に
この起動述語を定義できるように,program/1を
設けました。program/1はクライアントと通信して
いるスレッドに対し、子スレッドとして動作する
ようになっていて、質問Goalはこの子スレッドの
実行とは切り離されて、子スレッド起動後すぐに
終了してしまいます。Goalのなかに束縛されていない
論理変数があっても、解決されないまま、
クライアントに解として返されます。


39 名前:DNS未登録さん mailto:sage [2006/03/30(木) 09:43:41 ID:???]
ちょっと説明を間違えました。

質問 ?- program(Goal). は親スレッドで実行され、
直ぐに終了します。

program(Goal) :- 並列実行(( true; Goal )).

のようなイメージでtrueだけ実行するのが親、
子でGoalが実行されます。

40 名前:DNS未登録さん mailto:sage [2006/03/30(木) 11:48:49 ID:???]
ネットワークについては全くの素人ですが、
このシステムでは現在どんなことが課題と
なっていますか。




41 名前:DNS未登録さん mailto:sage [2006/03/30(木) 12:00:06 ID:???]
>>39
さらに間違っていた。
親は子の終了を待つから、終了するのはソケット通信だけか。
エージェントが生息している間は、
親はひたすら、子の終了を待って、存在している。
ということですね。


42 名前:DNS未登録さん mailto:sage [2006/03/30(木) 12:08:10 ID:???]
program/1のコードを見直してみたら、
サーバから見るとここでいう親が既に子スレッドで、
直ぐにソケットに質問のまま返信してソケットを
shutdownしてしまっています。
Goalはサーバから見て子スレッドとして、
普通に負節として、実行されている。
ということでした。
program/1の特徴はソケットへ未解決の質問を
そのまま応答して、ソケット通信を終了して
いる点にあるようです。

43 名前:DNS未登録さん mailto:sage [2006/03/30(木) 12:40:27 ID:???]
>>40

・ 述語定義の管理の問題。
・ リアルタイムに参照できるグローバルなlistingシステム(述語辞書)。

44 名前:DNS未登録さん mailto:sage [2006/04/03(月) 22:47:25 ID:???]
他のノードにあるPrologの定義域に自分と共有するもの、
基底クラスというかコモンセンスといった方が良いか、
そんなものがあるかというと、これがほとんどない。

暗い霧のなかで未知の人に遭遇したとき、どうすうれば
よいかというようなレベルです。探りをいれていく。
すこしづつ質問していって、相手の世界の輪郭から掴んでいく。

これをPrologシステムにも適用したいのだが、きっかけからして
わからない。
「あなたは何に興味があるの」
こういう質問への答えを的確に準備したシステムに出会ったことが
ない。


45 名前:DNS未登録さん mailto:sage [2006/04/04(火) 09:06:39 ID:???]
自分が利用できる関数を他の定義域で探すということは
コンピュータサイエンスのどんなカテゴリーに入るのですか。

46 名前:DNS未登録さん mailto:sage [2006/04/04(火) 09:39:43 ID:???]
コンピュータサイエンスでですか。
プログラムパターンともちょっと違うし、
わかりません。

47 名前:DNS未登録さん mailto:sage [2006/04/04(火) 10:05:23 ID:???]
一番普通にはtmpファイルにlistingして
ダウンロードして解析ということになると
思いますが、ファイル転送はftpですか。

48 名前:DNS未登録さん mailto:sage [2006/04/04(火) 14:31:04 ID:???]
ftpdが起動されていることは必要条件ですね。

単なる負節起動の他に、Upload and Go も
基本動作としているので、ftpdを基本要件と
するのが最もコストがかからず、安定する
ようです。

私は自分のサイトとの通信では自前の
転送述語で済ませていますが。

49 名前:DNS未登録さん mailto:sage [2006/04/05(水) 12:50:07 ID:???]
>>47
それから、サーバー側でファイルに書かずに
質問として扱う、

?- node_1 :: 述語表示(hoge).

?- node_1 :: 述語表示(hoge,X).

も勿論あります。

50 名前:DNS未登録さん mailto:sage [2006/04/05(水) 16:43:43 ID:???]
>>45
情報(この場合述語定義)の類似性や変更の推移に関する記述というと、
フレームでカバーできますね。多層フレームなんて、面白そうです。

あるメソッドがあるオブジェクトに属しているというのは考えてみれば
面白くありませんから。




51 名前:DNS未登録さん [2006/04/06(木) 10:32:34 ID:0Hhh/piQ]
並列実行は可能ですか。
1) 複数サーバにたいするOR並列
2) Prologを拡張してのAND並列

52 名前:DNS未登録さん mailto:sage [2006/04/06(木) 11:18:20 ID:???]
>>51
2)はやっていません。KLIC上にこれと同じネットワークを
構築しようとしてみましたが、現在の所失敗しています。

1)はそういう述語はあります。ただ、遅くてあまり使い物には
なっていません。
各ノードで1秒かかる質問を用意して、4ノードに質問して、
全ての解を蒐集すると5秒くらい掛かってしまいますw
各サーバがログを取っていて、その書き込み量が膨大に
なるせいですが、解を蒐集するのに自分のノードのサーバに
assertしてもらう方式をとっているので、書き込まれているかな、
とポーリング方式で問い合わせが必要でこれにコストがかかって
しまっています。
1分くらいかかる作業を要求すれば1分15秒くらいで終了しますから、
これはりっぱなものですが、現実にはこういう計算って発生しませんね。

最初に解を返したノードのものを解とするケースでは結構有用です。


53 名前:DNS未登録さん mailto:sage [2006/04/06(木) 11:58:18 ID:???]
>>52
1分15秒というのは10ノードの並列時のことでした。
4ノードだと、1分4秒くらいですね。

54 名前:DNS未登録さん [2006/04/08(土) 10:26:28 ID:MsM98g7K]
Ajaxなどで非同期通信ということが喧伝されていますが、
このネットワークで非同期通信は可能ですか。

55 名前:DNS未登録さん mailto:sage [2006/04/08(土) 10:42:29 ID:???]
>>54
>>36 以下で述べているエージェントとサンプルの
送信がそれに当たります。エージェントの場合は
サーバ側で永続しますが、質問が解決したら終了する
モードだと非同期処理と見なせます。

Ajaxがメジャーな技術になるなら、これ経由で
質問できるようにすれば面白そうですね。
w3mは開発が終っているし、Javascriptも
組み込めないからだめですが、
オープンソースのこの手のブラウザ経由という
可能性はあります。

56 名前:DNS未登録さん mailto:sage [2006/04/08(土) 16:13:17 ID:???]
ところで話は変わりますが、10年くらい前に、
事務処理のデータエントリーのプログラムで、
サーバーが側から、エントリー側に画面をpushし、
入力を促して、非同期にこれを受け取るという
システムの構築に困難を感じた事があります。

現在は、
1) アプリケーションタスクはエントリー側のサーバーに
mozillaのremote処理を要請
2) エントリー側でブラウザに入力画面の表示
3) アブケーションタスクは自ノードサーバへの入力待ち合わせ
4) formにより、データ処理サーバ側にデータ送付
4) アプリケーションは自ノードサーバからデータ受け取り

で簡単に実現しています。

57 名前:DNS未登録さん mailto:sage [2006/04/09(日) 04:04:59 ID:???]
郵便、黒板、電話的な要素が混然としていますねw




58 名前:DNS未登録さん mailto:sage [2006/04/10(月) 11:31:35 ID:???]
一般的RPCコールに比べて、Prologであることの
優位性は何でしょう。

59 名前:DNS未登録さん mailto:sage [2006/04/10(月) 11:43:47 ID:???]
>>58
Prologであること。としか言い様がないです。

・ 頑強なインタプリタ。
・ 簡素な構文。
・ 強力な構文解析力。
・ 強力なデータベース。
・ 強力な論理的記述力。
・ 構造変換など強力なメタプログラミング。

どれをとっても(MLの系統を除くと)比類ないものです。

60 名前:DNS未登録さん mailto:sage [2006/04/10(月) 12:02:31 ID:???]
プログラム言語は最終的には
MLとPrologの一騎打ちになるとお考えですか。



61 名前:DNS未登録さん mailto:sage [2006/04/10(月) 12:15:14 ID:???]
はい

62 名前:DNS未登録さん [2006/04/11(火) 08:19:23 ID:pQqjlZKi]
ICOTの成果でPrologで書かれたものが公開されて
ますよね。あれが、

?- prolog_aitec_lib :: hoge(_).

みたいな感じで簡単に利用できたらいいですね。



63 名前:DNS未登録さん mailto:sage [2006/04/11(火) 09:03:17 ID:???]
昨年限りで、AITECも完全に廃止となり、サイトも消滅。
私は、ほとんどダウンロードしてあるのですが、
アーカイブしとかなかったから、何がなんだかわからない。

ひとつふたつ余りREADMEを読まずに動いたものがあった。
ただし,4-5年前の記憶。

64 名前:DNS未登録さん mailto:sage [2006/04/11(火) 11:54:00 ID:???]
1980-2000年の間に上記のものや
単行本を含む文献上のPrologソースコード量は
膨大なのですが、実際に質問として使用できる
状態のものはほとんどありません。
著作権上の問題がありますが、これを可能な限り
生き返らせることに余生を捧げましょうw


65 名前:DNS未登録さん mailto:sage [2006/04/11(火) 16:01:37 ID:???]
>>60 >>61
本当に高水準言語一辺倒の時代なんて
くるんですかねー


66 名前:DNS未登録さん mailto:sage [2006/04/12(水) 09:44:34 ID:???]
K-Prologを使っているのですが、system述語を実行するとき
ストリームを切り替えてPrologの引数に単一化したいのですが
なにか方法はありませんか。

67 名前:DNS未登録さん mailto:sage [2006/04/12(水) 10:20:18 ID:???]
>>66
C言語インターフェイスを使って、
system/2を作る。他ない?

シェルコマンドの出力をあるファイルに
リダイレクトして、制御が返ってきたら、
plc側でopen()する。この場合、ファイル名
が固定されるから、2システム以上の並列だと
具合が悪い。

C言語インターフェイスでtmpnam/1作って
おいた方がよい。


68 名前:DNS未登録さん [2006/04/12(水) 11:42:56 ID:IFSrcVZi]
やはり、popenは組み込み述語として欲しいね。
OSに依存する余地から、避けたいというのは
わかるけれど。

69 名前:DNS未登録さん [2006/04/12(水) 11:44:43 ID:IFSrcVZi]
依存する余地から -> 依存するから

70 名前:DNS未登録さん mailto:sage [2006/04/12(水) 14:05:48 ID:???]
他のノードでsystemなどは実行できるのですか。





71 名前:DNS未登録さん mailto:sage [2006/04/12(水) 14:15:54 ID:???]
>>70
できます。できますが、そのノード(サーバー)の設計によります。
セキュリティを重視して拒否することはできます。
一般には

?- node1 :: shs(free,X).

X = [' total used free shared buffers cach
,'Mem: 512588 492600 19988 0 26800 230236',
+ buffers/cache: 235564 277024','Swap: 1044216 92760 95
6'].
のように使います。

?- node1 :: !pwd.
/usr/local/prolog
yes
?-
この場合はnode1でバッファーに書き出された/usr/local/prolog
がクライアント側画面にで表示されています。


72 名前:DNS未登録さん mailto:sage [2006/04/12(水) 14:21:46 ID:???]
実現方法は?


73 名前:DNS未登録さん mailto:sage [2006/04/12(水) 14:32:16 ID:???]
上流は省略します。

応答のソケットはHeaderの後、
2行改行の後、変数解決済みの質問がきます。
?- findall(append([a,b],[c,d],X),
append([a,b],[c,d],X),
[append([a,b],[c,d],[a,b,c,d])]).
この後にサーバ側の>>71に書いたバッファーの内容が続きます。

それだけです。

74 名前:DNS未登録さん mailto:sage [2006/04/12(水) 14:37:56 ID:???]
>>71 の後の例ですと

?- findall(!pwd,!pwd,[!pwd]).
/usr1/local/prolog

がソケットの中身です。

ここでは>>29のサーバ側からのpush(対話応答)は
行っていません。

75 名前:DNS未登録さん mailto:sage [2006/04/12(水) 15:48:11 ID:???]
クライアント -> サーバも

最初に2行連続して改行された後の文を
質問と見なしてparseします。

2行改行されるまではHeaderであり、
何が書かれていてもよいというルールです。

76 名前:DNS未登録さん mailto:sage [2006/04/14(金) 12:35:53 ID:???]
文字コードのエンコーディングやReferURL情報等
一切なしですか・・・。


77 名前:DNS未登録さん mailto:sage [2006/04/14(金) 17:10:09 ID:???]
いや、Headerを解析してhttpプロトコルのHeaderだったら、
当然取得しておく。
何を以てプロトコルを認識するかは決めていない。

78 名前:DNS未登録さん mailto:sage [2006/04/15(土) 06:29:09 ID:???]
>>63
ICOTの開発したプログラムは
www.icot.or.jp/ARCHIVE/Museum/IFS/abst/XXX-J.html
から現在でも入手できます。(XXは001-100)

79 名前:DNS未登録さん [2006/04/15(土) 08:06:02 ID:jel5navj]
以前ム板で、PrologのユーザやベンダはPrologは
libraryをあまり作りたがらない、実際その時に
書けばよいから、作る必要がない。
と書いたら、「正規表現は作れますか」ときた。

Prologで正規表現なんて使わないよ。なんで
そんなの覚えなくちゃならないの?って答える
べきところをオタフタして答え損なったw。

正規表現は一種の言語だから論外としても、
辞書引き問題はこういうネットワークでは
結構深刻ですね。辞書、ここでは他ノードに
たいするlistingですが、これを引くコストは
ばかにならない。自分で書いた方がとどうしても
思ってしまう。



80 名前:DNS未登録さん mailto:sage [2006/04/15(土) 11:51:27 ID:???]
Prologの場合要約っていうのができないからね。
コード自体が要約だw



81 名前:DNS未登録さん mailto:sage [2006/04/15(土) 17:06:35 ID:???]
>>79
つまりperlとかの方が開発効率が良いと言うことですね。


82 名前:DNS未登録さん mailto:sage [2006/04/15(土) 17:52:27 ID:???]
>>81
一般論としてですが、ライブラリが揃っていて、
その使い方を熟知している場合、開発効率は
高くなりますね。
ここでの文脈で言うと、知識(たとえば正規表現の
記法)を得るためのコストとプログラム作成時の
速度差の累計で評価しなくてはならないでしょう。

Javaのように言語を熟知していても、クラス名や
メソッド名が妙に長くて、効率が上がらないケースも
ありますが。Eclipseとかを駆使しない場合ですが。

Prologのような言語はライブラリ知識獲得のコストは
ゼロだということになります。常にその場でリスト処理で
済ませますから。

83 名前:DNS未登録さん mailto:sage [2006/04/15(土) 18:10:58 ID:???]
Prologで使う述語といえば
member,repeat,forの他には、
副文字列を切り出す part_atom
文字列(atom)をリストに変換する
atom_chars,atom_codes
それから複数のatomを結合する concat_atom

くらいのものです。
これだけで、他のインタプリタと同等の
速度で対話実行ができるわけですから、
少なくとも初心者向きなのはこちら
ということになります。

84 名前:DNS未登録さん mailto:sage [2006/04/15(土) 18:12:22 ID:???]
ごめんなさい。findall を落としました。

85 名前:DNS未登録さん [2006/04/15(土) 18:22:16 ID:jel5navj]
先輩
true,fail,not,open,close,read,get_char,get_code,
consult,reconsult,assert,retract,abolish
が抜けてますよw

まあ、これで全部か。


86 名前:DNS未登録さん mailto:sage [2006/04/15(土) 18:38:08 ID:???]
ハハハ
まだあるぞ。write,put_code,put_char
fuctor,argも使うね。

30個くらいにはすぐなっちゃう。
結構、知識がいるね。


87 名前:DNS未登録さん mailto:sage [2006/04/15(土) 18:53:41 ID:???]
この際、思惑抜きに使う述語をあげてみよう。
上記の他に、
integer,float,number,atom,atomic,var,compound,の型判定述語
is,=も述語だ。
predicate_typeなんかも使うことがある。
それから述語ではないが関数も覚えなくちゃ。

まあ、こんなものだが、7-8割が
member,fail,true,atom_part,concat_atomで済むか。

88 名前:DNS未登録さん mailto:sage [2006/04/16(日) 05:46:29 ID:???]
もしかすると一番重要な述語 system が抜けていた。

ファイルから情報を読み取るか、Prologプログラムとして、
あらかじめconsultしておくか、流儀はいろいろあるが、
基本的な組み込み述語の使用頻度はどんなプログラマでも
大差ないのがPrologの特徴かな。

89 名前:DNS未登録さん mailto:sage [2006/04/17(月) 14:08:42 ID:???]
結局、Prologも使いこなすにはそれなりの知識がいる、と。

達人を集めて競わせるとどの言語も生産性に差はでない。
でも、PerlとPrologくらい目指す方向が異なると、
初心者、初級者、中級者、上級者とそれぞれの段階で
生産性に差が出てくるような気がする。実証というのは
難しいだろうが、面白いテーマなのでちょっと研究してみる。

90 名前:DNS未登録さん [2006/04/17(月) 14:23:22 ID:wrBcmWfA]
初心者: 試合開始1秒 面が決まりPrologの勝ち。

3時間で全ての機能を覚えられるからね。



91 名前:DNS未登録さん mailto:sage [2006/04/17(月) 14:28:02 ID:???]
いや、PerlだってCGI絡みにしなければそのくらいで説明できないか。

92 名前:DNS未登録さん [2006/04/17(月) 14:31:35 ID:Qe0R37ZJ]
無限に拡がる軟体動物みたいなやつです。
無理ですね。

93 名前:DNS未登録さん [2006/04/17(月) 14:41:56 ID:FRz6ud02]
ム板なんかにプログラムの基本っていうことをいう人がいる。
私はプログラミングに基本なんてないと思うが、この人達の
いう基本以外、Prologのプログラミングでは使わない。
一方、Perlの方は、ぜんぶ応用という感じで、基本部分の抽出
なんてばかばかしくなる。そういう意味で大変魅力ある言語
だと思う。

94 名前:DNS未登録さん mailto:sage [2006/04/17(月) 14:49:00 ID:???]
つまり、Perlの場合全部「逆引き」で攻めていくって感じ?

95 名前:DNS未登録さん [2006/04/17(月) 14:54:32 ID:lp7KF6SW]
ライブラリ=「逆引き」ですよ

96 名前:DNS未登録さん mailto:sage [2006/04/17(月) 14:55:43 ID:???]
わかったから、sage進行にしてくれない。なにか恥ずかしい。

97 名前:DNS未登録さん mailto:sage [2006/04/17(月) 18:28:10 ID:???]
Perl的な部分が利いてくるのは中級者から?

98 名前:DNS未登録さん mailto:sage [2006/04/17(月) 18:34:29 ID:???]
ところで >>93
>この人達のいう基本以外、Prologのプログラミング使わない。
なんか、日本語がヘンなようで。
この人達のいう基本しか、Prologのプログラミングでは使わない。
じゃないか。

99 名前:DNS未登録さん mailto:sage [2006/04/18(火) 07:18:30 ID:???]
考えてみると、Perlのような言語がPrologより
生産性が高い?という議論にマジで応対している
のだから、驚くべき事だ。20年前にはPrologの
生産性は群を抜いていた。Lispの倍くらいの
速度で仕上がっている感覚だった。
私はRubyくらいしか使わないが、これもしかすると
Prologといい勝負いけるんじゃないかと思うことが
ある。
ここ二十年のプログラム言語のの記法レベルの洗練は
相当なものだ。

100 名前:DNS未登録さん mailto:sage [2006/04/19(水) 19:55:59 ID:???]
APLなどがそうだったと思うが、
素人が見ると何が書いてあるかさっぱりわからない。
達人から見るとこんな易しいものはない。

こういう言語は滅びる。Perlなどもちょっとこういう
臭いがする。



101 名前:DNS未登録さん mailto:sage [2006/04/20(木) 08:23:05 ID:???]
略記法に?というものは多いが、
基本的には、
Perlはただ書けばよいだけで、
素直なものだと思うが。

102 名前:DNS未登録さん [2006/04/22(土) 10:45:33 ID:ENgCktJU]
.NETではPrologは完全に無視されているようですが
その辺りの情報は何かありませんか。

103 名前:DNS未登録さん mailto:sage [2006/04/22(土) 10:51:29 ID:???]
マイクロソフトがPrologを避けている理由や
経緯については全く知りません。内部資料と
してはその理由が記述されたものがありの
だろうから、社員が書き込んでくれると
ありがたいのですが。

104 名前:DNS未登録さん mailto:sage [2006/04/22(土) 19:38:08 ID:???]
バッチ処理、Prologの負節実行をある時刻に
起動するような場合がありますね。他の
コンピュータのPrologの場合どんな手順に
なるのしょうか。

105 名前:DNS未登録さん mailto:sage [2006/04/22(土) 19:55:13 ID:???]
私はLinuxなのでatコマンドで説明します。
第一にどこでatコマンドを切るかの選択があります。
自ノードでも可能ですし、リモートノードにatコマンド
を起動することも可能なわけです。
それから、ここでいう、Prologサーバーで負節を実行
するのか、それとも別にPrologを起動して実行するのかの
選択もあり得ます。どれも、可能で組み合わせは多岐に
渡りますが、私の方法を述べます。コードを書いてしまいましょう。
% *** user: '予約' / 3 ***
'予約'(_時,_分,Network :: _副目標) :-
'整数から文字列'(2,_時,_時文字列),
'整数から文字列'(2,_分,_分文字列),
'cgi述語表現'(Network,80,_副目標,_CGI述語表現),
tmpnam(F),
open(F,write,FO),
wr(FO,'w3c %t\n',[_CGI述語表現]),
close,
concat(['chmod 777 ',F],S),
system(S),
concat_atom(['echo "',F,'" | at ',_時文字列,_分文字列],S2),
system(S2),
! .
要するに自ノードでatコマンドを実行しています。ポート番号はここでは80。
w3cのURLにform情報を付加して質問をしっぱなしの仕様です。

106 名前:DNS未登録さん mailto:sage [2006/04/22(土) 19:56:29 ID:???]
concat(['chmod 777 ',F],S),

concat_atom(['chmod 777 ',F],S),
の間違いです。

107 名前:DNS未登録さん [2006/04/22(土) 20:00:36 ID:whEFssI9]
cgi述語表現の定義も教えてください。

108 名前:DNS未登録さん mailto:sage [2006/04/22(土) 20:07:05 ID:???]
cgi述語表現(Network,PORTNO,_述語,_CGI述語表現) :-
url述語表現(_述語,_URL述語表現),
concat_atom(['http://',Network,:,PORTNO,prolog_file,'?query=%3F-+',_URL述
語表現],_CGI述語表現),
! .

url述語表現は例の漢字コードの変換です。

109 名前:DNS未登録さん mailto:sage [2006/04/27(木) 19:27:58 ID:???]
httpプロトコルなのですか?



110 名前:DNS未登録さん mailto:sage [2006/04/27(木) 19:32:27 ID:???]
この場合はそうです。
基本的にサーバーが要求するポート番号は自由です。
80を指定しているサーバーだと、多分httpを期待してる
のだろうと考えてhttpのheaderを付加して送りますね。



111 名前:DNS未登録さん mailto:sage [2006/04/27(木) 19:35:21 ID:???]
遅くないですか?


112 名前:DNS未登録さん mailto:sage [2006/04/27(木) 19:38:13 ID:???]
遅いですw
でも、セッション数などは変わらないわけですし、
若干Headerの情報が多いという程度ですから、実際は
どんなプロトコルでも似たようなものですね。
インターネット経由の場合は。

113 名前:DNS未登録さん mailto:sage [2006/04/27(木) 20:15:55 ID:???]
クライアント側でmozillaのようなブラウザを介して、
ハンドリングすると極端に遅くなりますね。
コマンドの解読はたいしたコストではないと思いますが
やはりバッファーかなんかを確保するので時間がかかる
のでしょうか。w3cなんかそんなことしてないと思うの
ですが、やはり少しかかりますね。

114 名前:DNS未登録さん [2006/04/28(金) 11:45:47 ID:Kl9Nx86D]
socket関係が組込述語になっている処理系というと
どんなものがありますか。


115 名前:DNS未登録さん mailto:sage [2006/04/28(金) 20:39:20 ID:???]
私はIF/Prologを使っていて、最初からsocketは組み込みでした。
それで、直ぐにWebプログラムが書けました。現在でも、
メーラーなどに不満な点があると、Prologで書き直してしまいます。
K-Prolog、SWI-Prolog、Visial-prologについて、ちょっと確かめて
からお答えします。
IF/Prologの組み込み述語は、
socket/3,current_socket/3,select/3,socket_accept/3,
socket_bind/2,socket_connect/2,socket_listen/1/2,socket_close/1,
socket_receive/2/3,socket_raw_receive/4/5,
socket_send/2/3,socket_shutdown/1/2,alarm/1
です。

116 名前:DNS未登録さん mailto:sage [2006/04/29(土) 05:41:34 ID:???]
前にIF/Prologの販売は2004年で停止となったと
書きましたが、どうもヨーロッパでは販売されて
いるようです。日本のIF/PrologのB氏がそんな
ことをいっていました。
直接ヨーロッパ向けのWebサイトで購入できそうです。
ただ、個人で買うには高いですね。人に勧めるのを
躊躇する価格帯です。

117 名前:DNS未登録さん mailto:sage [2006/06/02(金) 14:24:12 ID:???]
最近IF/Prologのサイトを見たが、日本SGIのマシン上では
販売を続けるらしい。日本SGIのUNIXマシンにインストール
してということなので、日本SGIの将来が不透明でこの話も
どうなるかわからない。

118 名前:DNS未登録さん mailto:sage [2006/06/06(火) 08:57:13 ID:???]
GNUにPrologぐらいあるんだが。
pauillac.inria.fr/~diaz/gnu-prolog/

気に入らないなら、codeをcontributeしまくって、自分好み
に誘導するのがbestだよ。

...日本のprolog屋がC/C++なんて書けるはずもないか。
無意味な論文積み上げて、博士や大学教員になる事しか考えて
ないからな。


119 名前:DNS未登録さん mailto:sage [2006/06/06(火) 09:59:03 ID:???]
>>118 書き込みありがとうございます。
私は研究者ではありませんが、C/C++はほとんど使わないので、
gやSWIの拡張は日本語処理の部分以外試みたことがありません。
これまで使ってきたものを取り上げることが多くなります。
SWI-Prologの利用の方が優勢だと思いますが、gprologも大学での
利用は多いはずです。これこれの処理をするには、
どんな組込述語を用意すると便利かの一覧を用意するといいのでしょうね。

120 名前:DNS未登録さん mailto:sage [2006/06/17(土) 19:40:53 ID:???]
上の方の質問と応答が痛々しい程に自演臭い。



121 名前:118 mailto:sage [2006/06/18(日) 14:04:39 ID:???]
>120
てめー、腐れProlog屋と一緒にすると頃すぞ。


122 名前:DNS未登録さん mailto:sage [2006/06/18(日) 18:45:34 ID:???]
>>121
「上の」じゃなくて「上の方の」だろ。

>>22〜64あたり、
やたら丁寧な記者みたいな質問と
やたら早い反応の返答。
どう考えても不自然だ。

123 名前:DNS未登録さん mailto:sage [2006/06/21(水) 07:34:49 ID:???]
>>120 >>122
完全な自演ではありませんが、うちの社員との Q & A です。
質問者もかなりわかった人間です。

124 名前:DNS未登録さん mailto:sage [2006/06/21(水) 07:49:43 ID:???]
要するに、
Prologを利用するときは同時に
共用Prologデータベースも立ち上げるべきだ、
という主張をしているスレなのです。

125 名前:DNS未登録さん mailto:sage [2006/07/23(日) 09:32:55 ID:???]
実用上、特に重要と
思われる組込述語を列挙すると(IF/Prologによる)

predicate_type/2
current_predicate/1
parse_atom/6
functor/3 (=..)/2
arg/3
op/3
current_op/3
clause_with_names/3
read_with_names/2 ほか入出力
system/2
findall/3
member/2
open/3
close/1
atom_chars/2
atom_code/2

unify述語( =/2 , ==/2 など )
型判定述語 socket関係述語

(= や unify関係は除外したけれど)

最も重要なのは parse_atom/6 と findall/3 かな


126 名前:DNS未登録さん mailto:sage [2007/06/12(火) 11:06:22 ID:???]
PrologをServer+Clientで立ち上げるという趣旨には大賛成。
ただ、通信部分はPrologの項を生で送るのはどんなものか。
SOAPに変換したらどうだろう。

127 名前:DNS未登録さん [2007/06/18(月) 16:21:26 ID:qQekVywy]
Linux上にIF/Prologで構築されているようですが、
WindowsでP#でもうまくいくでしょうか?

128 名前:DNS未登録さん mailto:sage [2007/06/18(月) 17:17:59 ID:???]
およそ一年ぶりの書き込みになります。ageていただかなかったら
永久に気が付かなかったかも知れません
>>127
P# ! 知りません。3年くらい前にちらっとそんな話題が
あったような記憶があるのですが、マイクロソフトと関係が
あるのですか。

129 名前:DNS未登録さん mailto:sage [2007/06/18(月) 17:26:07 ID:???]
>>126
XMLでのデータ授受は有力ではないでしょうか。
私はSOAPの詳細を知らないので気の利いたコメントは
できませんが、Prolog以外の言語に対してサーバーの
立場を取るとなると、クライアントの処理言語に対して
Prologの解析系を持てというのは現実的でないでしょう。
Prolog-XML変換はどこにでもあるのだから、Prolog側で
XML変換してあげればよい。
実際私は、XBRL(XMLベースのビジネス用通信形式テンプレート)と
Prolog項の変換の仕事をしたばかりです。

130 名前:DNS未登録さん mailto:sage [2007/08/01(水) 04:14:37 ID:???]
  1980年代のProlog資料をまとめてあるサイトないかな。



131 名前:DNS未登録さん mailto:sage [2007/10/31(水) 18:35:10 ID:???]
最近、Erlang との連携を始めました。TCP/IP経由で
Erlangをさらにサーバに見立てて、並列(平行)処理を
委託します。ただ今のところEUC-JPの漢字処理が
うまくいかず、Erlang側のプログラムはあまり凝った
ものが作れません。漢字処理が問題がある場合、
ソースに遡れば大概は上手くいくことが多いのですが、
Erlangはconfigure->make->make install で8時間くらい
かかる代物で、とても私が手を出せるものではありません。

132 名前:訂正 mailto:sage [2007/10/31(水) 18:48:23 ID:???]
ただ今のところ -> ただ、今のところ
漢字処理が問題がある場合、 -> 漢字処理に問題がある場合、

133 名前:DNS未登録さん mailto:sage [2007/11/05(月) 12:10:17 ID:???]
何故にErlangが出てきたかという話をしておきます。
これはスケジューリング問題と関係があります。
Prologはスケジューリング問題の解決に最適な言語ですが、
これは「勤務表」のようなあまり、時間的な要求の厳しくない
領域を対象とした場合です。
ライン制御のような部分でのスケジューリングとなると
コードとしては洗練されたものになりますが、やはり、
GCによる遅延の問題がある。ラインの流れに追いつけなく
なる可能性があります。これを回避する方法はやはり、
その遅延が致命傷になる部分だけは切り離して、Prolog外で
処理するほかない。
そこで、Prologからのコード変換が容易で、小プロセスを
生成できて、並列による非同期処理が書きやすいErlangが
でてくる。
今のところは、Prolog/Erlang変換の研究の域をでませんが
相当に有望なのではないかと思います。

134 名前:DNS未登録さん mailto:sage [2008/04/10(木) 12:24:36 ID:???]
INAP'96で日本では初めてのErlangチュートリアルが
あったのですが、当時10年の歴史がある言語なのに、
ほとんど知ってる人いなかったですね。最近の流行は
隔世の感ありです。

135 名前:DNS未登録さん mailto:sage [2008/04/12(土) 10:46:47 ID:???]
Wijaという環境上に構築されるオーバーレイGHCというものが
あります。例の未踏ソフトの一つなのですが、PrologとGHCの
違いはありますが、やりたいことはたいへん似ているようです。
残念ながらうまく起動できなくて、今のところ私のサーバーと
混在できていません。今週はこれがテーマ。

136 名前:DNS未登録さん mailto:sage [2008/04/30(水) 04:35:35 ID:???]
>>135
Wijaの方は進んで以内が、昨日、erlangサーバがevalしていなかったのを
ム板のErlangのスレのレスでのやりとりで、方法が分かったので書き換えて完成。
幸せ。
これまでは関数の機能番号と引数を一行づつ渡していた。functorで分解した
ような状態で。


137 名前:DNS未登録さん [2008/06/05(木) 10:51:17 ID:gGkN7ojL]
Erlangサーバについてですが、
Prologサーバからさらに
Erlangサーバに要求をだすということですよね。
Erlangプログラムのuploadはどうやるの?



138 名前:DNS未登録さん mailto:sage [2008/06/05(木) 12:36:10 ID:???]
>>137
Prologクライアントから直接呼ぶこともできます。
Prolog -> Erlang のバイナリーファイル転送は作ってないので、
そこは FTP か Samba のお世話になる。
upload_and_eval(ErlangServer,ErlangModule,Eval_Function) :-
  cp(ErlangModule.erl,ErlangServer::ErlangModule.erl),
  ErlangServer :: (c:c(ErlangModule) -> _),
  ErlangServer :: (ErlangModule:Eval_Function -> X).
ディレクトリはそれぞれホームディレクトリだとして。


139 名前:DNS未登録さん mailto:sage [2008/06/05(木) 12:37:44 ID:???]
すみません。
upload_and_eval(ErlangServer,ErlangModule,Eval_Function,X) :-
でした。

140 名前:DNS未登録さん mailto:sage [2008/06/05(木) 13:06:17 ID:???]
書き直します。
upload_and_eval(ErlangServer,ErlangModule,Eval_Function,X) :-
  cp(ErlangModule.erl,ErlangServer::ErlangModule.erl),
  ErlangServer :: (c:c(ErlangModule) -> {ok,ErlangModule}),
  ErlangServer :: (ErlangModule:Eval_Function -> X).



141 名前:DNS未登録さん mailto:sage [2008/06/05(木) 13:09:28 ID:???]
upload_and_eval(ErlangServer,ErlangModule:Eval_Function -> X) :-
  cp(ErlangModule.erl,ErlangServer::ErlangModule.erl),
  ErlangServer :: (c:c(ErlangModule) -> {ok,ErlangModule}),
  ErlangServer :: (ErlangModule:Eval_Function -> X).
の方が分かり易いか。

142 名前:DNS未登録さん mailto:sage [2008/06/05(木) 18:14:59 ID:???]
>>141
コピー元は自分だからPrologサーバで
  cp(ErlangModule.erl,ErlangServer::ErlangModule.erl),
を実行すると、Prologサーバのワーキングディレクトリから
ErlangModule.erlファイルをコピーしようとするはず。
これは具合が悪いから、cpはこの述語から切り離す他ないの
ではないか。


143 名前:DNS未登録さん mailto:sage [2008/06/05(木) 20:14:18 ID:???]
>>142
そうでした。

144 名前:DNS未登録さん mailto:sage [2008/06/06(金) 04:53:10 ID:???]
>>142
uload_and_eval(Myhostname,ErlangServer,ErlangModule:Eval_Function -> X) :-
  cp(Myhostname::ErlangModule.erl,ErlangServer::ErlangModule.erl),
  ErlangServer :: (c:c(ErlangModule) -> {ok,ErlangModule}),
  ErlangServer :: (ErlangModule:Eval_Function -> X).
一引数増やしました。

145 名前:DNS未登録さん mailto:sage [2008/06/06(金) 08:28:45 ID:???]
Wijaの オーバレイ GHC 使ってみましたが、私のPrologサーバとはまったく違うものでした。
詳しい報告はあとで。

146 名前:DNS未登録さん mailto:sage [2008/06/07(土) 05:50:01 ID:???]
upload_and_eval は長いから u_eval とする。
クライアントノードが c1
Prologサーバが p1
Erlangサーバが e1 として、c1がp1にe1へのu_eval()を委託する場合.
モジュールはmy 関数はappend/2とする。
?- p1::u_eval(c1,e1,(X は my:append([a,b],[c]))).
X = [a,b,c]
yes
p1を経由せず直接質問するなら
?- u_eval(c1,e1,(X は my:append([a,b],[c]))).
X = [a,b,c]
yes
となる。大分すっきりした。

147 名前:DNS未登録さん mailto:sage [2008/06/07(土) 06:24:38 ID:???]
ErlangサーバにDownloadさせる仕様にできないか?
Erlangサーバの関数を d_eval() が モジュール erlang_server にあるとする。

?- X は e1::erlang_server:d_eval(c1,my:append([a,b],[c])).

これで良さそうだが、Erlang側でd_eval() を解析評価する時に、
append/2が先に評価されてしまって多分うまくいかない。

148 名前:DNS未登録さん mailto:sage [2008/06/21(土) 05:49:22 ID:???]
コンパイルするべきモジュールを引数に分離して、しかも評価される関数を
文字列として渡してe_evalの中でさらに評価させる。

?- X は e1::erlang_server:d_eval(c1,my,"my:append([a,b],[c])").

すっきりしない。

149 名前:DNS未登録さん mailto:sage [2008/06/21(土) 05:51:14 ID:???]
二回に分離して質問するところを、強引に一回に納めた感じだ。

150 名前:DNS未登録さん mailto:sage [2008/09/19(金) 08:36:17 ID:???]
crontabなんかで質問を予約する場合もサーバにリクエストするんだよね。
どんなコマンドになるの?




151 名前:DNS未登録さん mailto:sage [2008/09/19(金) 09:05:51 ID:???]
>>150
>>104 - >>108 当たりにcrontabではありませんが、atコマンドでの
話が出ています。

152 名前:DNS未登録さん mailto:sage [2008/09/19(金) 09:21:09 ID:???]
サーバがポート番号1212で立ち上がって入れば、
:- tell(foo),listing,told.
を定時に実行させたければ、
w3c localhost:1212/prolog.file?query=%3F-+tell%28foo%29+%2C+%28listin
g%29+%2C+told
という一行だけのバッチファイルを作ってこれをcrontab -e で登録すればいい。
予約は自分のマシンだが、実行は他のマシンと言う場合は、localhostが
実行マシンのドメイン名に置き換わるだけ。

153 名前:DNS未登録さん mailto:sage [2008/09/19(金) 14:17:11 ID:???]
Prologインタプリタの質問で予約する。
毎日自分のマシンで12時に上記のlistingを行うには、
?- 予約(毎日,12,0,(tell(foo),listing,told)).
yes
yahooというドメイン上のサーバでlistingを行うには、
?- 予約(毎日,12,0,yahoo :: (tell(foo),listing,told)).
yes
予約自体をyahoo上のサーバにするには、
?- yahoo :: 予約(毎日,12,0,(tell(foo),listing,told)).
yes


154 名前:DNS未登録さん mailto:sage [2008/09/19(金) 14:39:14 ID:???]
>>153 の場合はポート番号は明記されていないからDefault値が
使われる。ポート番号がDefault値以外の場合は、サーバを
(_ドメイン:_ポート番号) :: で表現する。

155 名前:DNS未登録さん mailto:sage [2009/06/02(火) 15:22:52 ID:???]
長い間関数評価述語として"is"の代わりに"は"を使ってきました。
しかし、Erlangサーバが充実してきたため、表記法を改めて、
今後は"<-"に統一しようと思います。

?- X <- append([1],[a,b]).
X = [1,a,b];
no
ですね。

156 名前:DNS未登録さん mailto:sage [2009/06/02(火) 15:47:01 ID:???]
失礼。適切でなかった。統一してというのではなく、
Erlangの変数へのunifyが "->" なので
これはPrologの評価述語であるということを明確にするため、
"<-"を採用しました。

157 名前:DNS未登録さん mailto:sage [2009/06/07(日) 03:46:34 ID:???]
そもそもPrologに P->Q1;Q2 なんていう構文があるのが間違ってる。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<51KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef