Prologサーバー
: Prolog [takao@ozaki.name] 04/12/10 16:02:13ID:??? Prologサーバー網の構築に向けて、 ・ Prologサーバーとはなにか ・ Prologサーバーの共通仕様、機能 ・ プログラミング技術 ・ セキュリティについて 論じましょう。 : DNS未登録さん [sage] 04/12/10 16:31:46ID:??? ------------このスレッドは終了しました-------------- : toto [t_ozaki@nichibei-sekiyu.co.jp] 04/12/12 16:23:51ID:??? ソケットとstream通信の機構があればどんなPrologでもサーバーの 構築は簡単ですが、問題は、 サーバー側にどんな資源(述語)が定義済みであるかがわからない。 それを探るというのは現実的でない。やはり、XMLのDOMファイル みたいなものを第一段して、送り込んでおかないとうまくいかないの ではないか。そこら辺のプロトコルをどう設定するかですね。 : DNS未登録さん [] 04/12/13 07:08:55:3i5XTSef 以下質問ではこれこれの述語を使います。あなたのサーバーに未定義のときは どこそこからロードしなさいとURLでも渡す。 それより、まず共通ライブラリを決めて、お互いにPrologサーバーモジュールの 中に定義することとの方が先でしょう。 : DNS未登録さん [] 04/12/13 16:28:48:3i5XTSef Apacheの代わりにPrologでWebサーバー書いてるのだけど そういうのはPrologサーバーって云わないの? : Prolog [takao@ozaki.name] 04/12/13 19:45:06ID:??? httpプロトコルも当然ありえますね。すこし重いけど。 ブラウザもPrologで書いたらおもしろそう。 : DNS未登録さん [sage] 04/12/16 11:03:52ID:??? Prologは大学でして以来一度も触れてない。なつかし〜 けど利点はあるの? : Prolog [takao@ozaki.name] 04/12/16 17:09:16ID:??? LISPなどもそうですが、基本的にインタプリタの系です。 例外なくどの処理系もそうなっていて、?- 以下の質問に答える、 作りになっています。 既存のプログラムもその形式に沿うように短く作られていますから、 入力と出力をソケットにするだけで、PtoPでお互いに乗り入れられます。 あえて、Prologサーバーといい、自宅サーバーのカテゴリーの 中で話題にしようとするのはそんな性質があるからです。 もう一つ追加すると、オンメモリーのリレーショナルデータベースで あるという点も、お互いが情報を開示しあうためには最もふさわしい 系であるという根拠になるように思われます。 : DNS未登録さん [sage] 04/12/16 17:38:45ID:??? Prologなんてもう記憶のかなただが... > オンメモリーのリレーショナルデータベース これだけで十分ギャグだよ。運用できないじゃん。 Prolog使うと楽に解ける問題はあるだろうけど、それなら web serverをI/Fにすればよい訳で。 どうしてもやりたいなら、Prologサーバでしかできない応用例を 一つでいいから出してみな。 #クラスタリングして並列Prologエンジンなんつー化け物なら 作る意味もありそうだが、それは自宅サーバ板で話す話題じゃ ないだろ。 : Prolog [takao@ozaki.name] 04/12/16 18:47:02ID:??? > これだけで十分ギャグだよ。運用できないじゃん。 鋭いですね。実際、UNIX(LINUX)のサーバでfork()で処理すると セッション終了とともにデータベースの書き換えが無効になってしまう。 このため、バックエンドにもう一つデータベース用のPrologを立ち上げる ことになります。 >8 で書いたように単純にはいきませんね。 ネットワーク上でのデータの一貫性などできようはずがありません。 ただ、リレーショナルデータベースとRDBMSとは概念がずれます。 集合論に基づくデータモデルがリレーショナルデータベース、 Prologはそれを含んでいます。二項モデルや連想三つ組など 自分独自のデータモデルや環境を簡単に実現できることに 少々は意義がありましょう。 セキュリティ、信頼性とかを一切無視して、ネットワーク上で お互いの資源にもぐりこんで使いあいましょう、という話には Prologはぴったりですよということです。 アナーキーなネットワークのモデルを担えるかも、ということです。 : 9 [sage] 04/12/16 20:50:57ID:??? >10 象牙の塔の中で言ってる分には別に構わないけど、それで何か 意味があるのかい? 一時期流行ったmobile agentも結局実用にならなかったじゃないか。 Prologインタプリタをcgiで動かす以上の意味があるとは到底思えない。 : Prolog [takao@ozaki.name] 04/12/16 23:16:52ID:??? >11 うーん、実用になるかどうかですか。 参加する人がいるか、いないかでしょ。 Prologに拘るのは構造のないフラットなモデルでやりたい、という ことです。 : Prolog [takao@ozaki.name] 04/12/17 11:48:37ID:??? >9-11 実用(応用)ということになると、 Prologは記号処理言語なので、事務処理向きですね。 Adobe PhotoShopのようなソフトがPrologで書き直されることは 絶対無い。そういう意味で汎用言語とはいえないでしょう。 Prologサーバと観点からすると、スクリプト言語として、で十分 だと思います。複雑なことはいつでも書こうと思えば書ける。 : 9 [sage] 04/12/17 13:02:51ID:??? >13 ということは、"Prolog Server"は不要って事だね。 単にサーバーにProlog Interpreterが載っていればOKなんだろ? : Prolog [takao@ozaki.name] 04/12/17 13:40:07ID:??? >14 サーバの全てをPrologで書いてある必要はないです。 "Prolog Server"の定義がそういうものだとしたら、御免なさい、ですね。 そういう部分から議論したいと思ってこのスレを立ち上げたのですが、 私はPrologの項の形式で質問して、答えとしてPrologの項を返すことが できれば、"Prolog Server"と考えていいと思っています。 ApacheのCGI経由でも一向に構いません。軽い重いはありますが。 項(=論理式)の形式で返せないとなるとPrologのありがたみが でません。条件はそこです。 実は、C++やPerlで書かれていても、項の解釈ができて、 その形式で答えることができるなら、実装がどうであれ、 立派にPrologです。 : 9 [sage] 04/12/17 13:43:35ID:??? >15 だからね、世の中や学術用語では、そういうのはPrologサーバとは 言わないの。 名称問題はこれでいいとして、Prologって何に向いてるの?専門用語 を使わずに説明してごらん。 : Prolog [takao@ozaki.name] 04/12/17 18:25:17ID:??? >16 私は15年以上事務計算プログラムをPrologで書き続けてきている ので、事務処理には一番だと思っています。 構造がないとか云ったのとは矛盾するかもしれませんが、 木構造で管理できる部、課、係等の情報を扱うには向いています。 本来集約演算が苦手ですが、真っ先にそういう述語から書きますから、 特に不自由することはありません。 中小企業で管理者が直接プログラミングして、可能な限り仕様書を 書かない(せない)時、圧倒的なコストパフォーマンスを発揮します。 既知のやりたいことをただ「述べれ」ばよいだけですから。 大企業向きの言語ではないですね。 ********************************************************* SMTP,POP3,TELNET,HTTPに対応したサーバをPrologで書いて複数 ノードで分散して運用していますが、世界中にそういう環境を 期待するのは現実的でないですね。 : Prolog [takao@ozaki.name] 04/12/18 07:13:56ID:??? 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に一つづつ解を取り出すことになります。 これが普通のやり方ですが、これを標準としてよいか。 こんなことを議論したり、確認したいということです。 自分の環境を自由に利用させることは、エロサイトを立ち上げることより 遥かに危険なことです。そんなことを相手にしてもらえるカテゴリーを 探したら、自宅サーバ以外になさそうだったのでこの板をここに 作ってみました。 : Prolog [takao@ozaki.name] 04/12/18 09:33:06ID:??? 自己レス >サーバから解のリストLが返されますから 失礼、サーバから返されるのも、findall(P,P,L)です。ただし、 変数LがリストLとして具体化されています。 : 9 [sage] 04/12/22 11:10:14ID:??? なんだか言ってる事が思いっきり眉唾物なんだが、 本当にそんなことやってるなら、論文書けよ。研究会発表 でも構わんからさ。 : DNS未登録さん [] 2005/11/08(火) 21:13:50:+ggu+g89 Prologサーバーでググったらここにきた。こんな板にこんなものがあるとは。 それにしても偏ってるというか、怪しいというか。Telnetサーバーって なんのことかね。 でも、P2Pの感覚でPrologをお互い乗り入れるというのはおもしろい。 マジでレスすると、 こういうことをやるには、Modula-2のMonitorのような機構が必要で けっこう難しいと思っていたが。 : DNS未登録さん [sage] 2005/12/09(金) 01:57:32ID:??? PrologでCGI作ったら面白そうだ : DNS未登録さん [] 2005/12/13(火) 11:28:08:RlHAddgo 質問です。ここに書かれているPrologサーバーというのは プログラム板の「Prologでまったり」スレの中にでてくる Prolog共用データベースのことだと考えてよいのでしょうか。 : Prolog [sage] 2005/12/13(火) 13:14:27ID:??? はい。私はLinuxなのですが、これでTelnetか何かでPrologを 起動し、利用するとします。この環境を外部から割り込んできて 利用できるかというと、否です。利用者の主体はどうしても このような環境にあり、共用データベースは時に登録すると いうことになりがちですから、不本意です。しかし、これらのマルチユーザー、 マルチタスクの一つ一つが交信の対象になるためには、個々のProlog本体に 外部からの割り込みを受け入れる機構が必要になります。あるいは Subgoalの実行ごとにSocketの着信を検査するというような仕組みが 必要かも知れません。 の最後の部分はこのことだと思います。(私はModula-2を知りませんが) このような複雑なPrologの拡張なしに、サーバーを立ち上げてみようと いうのがここでの私のやり方です。 : DNS未登録さん [] 2005/12/18(日) 19:39:18:5fzl9ZgL もうちょっとまとめてから書いてくれない? : DNS未登録さん [sage] 2005/12/25(日) 20:27:28ID:??? よくわかんないけど、メッセージをふつうに構造体で表現すればいいんじゃまいか。 : DNS未登録さん [sage] 2005/12/26(月) 06:51:15ID:??? 構造体の解析をいちいち書かなくても良いように、 項(構造体)の解析系が強力なPrologを使いましょう という話なのですが。 : DNS未登録さん [sage] 2006/03/14(火) 10:06:53ID:??? サーバーの振る舞いは ソケットに得た情報を 1 ストリームから読み込みアトム(文字列)とする 2 そのアトムをparseしてPrologの項とする 3 この項をcallする(Lispのeval) 4 (論理変数が具体化された)項を文字列化する 5 ストリーム-ソケットを介してこの文字列を返送 となります。 受け取り項(構造体)のタイプは無限で、これに対処できて いるのはparseのおかげということになります。 : DNS未登録さん [sage] 2006/03/14(火) 18:08:03ID:??? これまで、サーバーはクライアントの質問に答えるだけでした。 これを質問に対してサーバーが質問し返す仕様に変更してみましょ %クライアント側 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を定義すれば 会話を継続する仕様へ変更することも簡単です。 : DNS未登録さん [] 2006/03/16(木) 11:36:53:W4o4bbe7 何が書かれているのかさっぱりわかりません。 解説つきでお願いします。 : DNS未登録さん [sage] 2006/03/16(木) 21:25:08ID:??? このスレは、 1・・自分のProlog実行環境の他にProlog共用データベースを立てる 2・・この共用データベースに対してPrologクライアントは自由に 質問し、解を得ることができる。 3・・この質問-回答におけるメッセージ交換をPrologの項で行う。 このようなネットワークを築くための基礎について議論するところです。 は質問-回答系がすでに築けているとして、 質問に対して、回答を返すほかに、サーバー側から、更に質問をプッシュし この質問のクライアント側での実行を約束事とすることにより、 クライアントの環境に応じて、回答の条件付けをする可能性を図るものです。 たとえば、 「あなたの環境がこれこれの場合は私の回答は有効だが、そうでない場合は 偽と見なしなさい。」というようなアサーションなどが考えられます。 内容の解説は順次述べます。 : DNS未登録さん [] 2006/03/21(火) 05:57:26:LdCGxyZg サーバー名と質問(メソッド?)の間が::で区切られて いますが、なぜ普通に:ではだめなのですか。 : DNS未登録さん [sage] 2006/03/21(火) 15:41:33ID:??? 現在のPrologの規格(たとえばISO規格)では、 A:BだとAモジュールのB述語の意味となり、ここでの サーバーの意味とは異なります。 Aをクラスと考えても、モジュールと理解しても、ノードと 解釈しても、意味的には近いと思いますが、処理系に モジュールと先に解釈されてしまうと仮にモジュール定義 がされていなくても、エラーになってしまうのが普通です。 それで、モジュールと衝突しないようにオペレータを::に してあります。 : DNS未登録さん [sage] 2006/03/27(月) 16:17:25ID:??? この環境だと、エージェントを 送り込んだり(受け入れたり)、 それを自由に移動させたりできる ように思いますが、 ライブラリやサンプルプログラムは ありますか。 : DNS未登録さん [sage] 2006/03/29(水) 20:28:56ID:??? エージェントについては詳しくありません。 一つ言えることは、イントラネットのように 管理者が端末の起動状態を完全に把握している場合は よいのですが、このネットワークのように 何時、各ノードが電源offになるか解らない環境では 駐在型のエージェントというのは難しいのでは ないかということです。長期間にわたり 他のノードでサンプリングを続けるためには、 そのマシン内でバッチタスクとして動作しなくては なりません。セキュリティの問題もあり、 このようなことが安定して行えるかどうか疑問です。 : DNS未登録さん [sage] 2006/03/30(木) 09:01:10ID:??? サーバーに対し、 ?- (reconsult(Local::File),program(Goal)). と言う質問をすることによって、 クライアントのファイルをサーバー側にreconsultして、 指定のGoalを実行するということはできます。 このスレを立てた理由のひとつとして、 このとき、reconsultされる述語が既にサーバーに 定義されている場合の処置について規定を定めたい、 ということがあります。 つまり、現在はこの点が決まっていません。 エージェントの動作としてはこのGoalから始まる サンプリングの中で、local(クライアント)側のサーバーに 対して蒐集したデータをassertすることで、エージェントを 送り込んだクライアントとは非同期に動作することが できます。 : DNS未登録さん [] 2006/03/30(木) 09:26:47:PDsgvxxv Goalの実行終了をクライアント側が待ち続けることになってしまいませんか。 : DNS未登録さん [sage] 2006/03/30(木) 09:37:31ID:??? そうですね。 述語program/1 は一般にProlog処理系は起動後の 最初の案の実行を :- program. と規定しています。 この規定を模して作った述語です。 それで、本当はprogramにしたかったのですが、 本来の述語と衝突してしまうため、利用者が自由に この起動述語を定義できるように,program/1を 設けました。program/1はクライアントと通信して いるスレッドに対し、子スレッドとして動作する ようになっていて、質問Goalはこの子スレッドの 実行とは切り離されて、子スレッド起動後すぐに 終了してしまいます。Goalのなかに束縛されていない 論理変数があっても、解決されないまま、 クライアントに解として返されます。 : DNS未登録さん [sage] 2006/03/30(木) 09:43:41ID:??? ちょっと説明を間違えました。 質問 ?- program(Goal). は親スレッドで実行され、 直ぐに終了します。 program(Goal) :- 並列実行(( true; Goal )). のようなイメージでtrueだけ実行するのが親、 子でGoalが実行されます。 : DNS未登録さん [sage] 2006/03/30(木) 11:48:49ID:??? ネットワークについては全くの素人ですが、 このシステムでは現在どんなことが課題と なっていますか。 : DNS未登録さん [sage] 2006/03/30(木) 12:00:06ID:??? さらに間違っていた。 親は子の終了を待つから、終了するのはソケット通信だけか。 エージェントが生息している間は、 親はひたすら、子の終了を待って、存在している。 ということですね。 : DNS未登録さん [sage] 2006/03/30(木) 12:08:10ID:??? program/1のコードを見直してみたら、 サーバから見るとここでいう親が既に子スレッドで、 直ぐにソケットに質問のまま返信してソケットを shutdownしてしまっています。 Goalはサーバから見て子スレッドとして、 普通に負節として、実行されている。 ということでした。 program/1の特徴はソケットへ未解決の質問を そのまま応答して、ソケット通信を終了して いる点にあるようです。 : DNS未登録さん [sage] 2006/03/30(木) 12:40:27ID:??? ・ 述語定義の管理の問題。 ・ リアルタイムに参照できるグローバルなlistingシステム(述語辞書)。 : DNS未登録さん [sage] 2006/04/03(月) 22:47:25ID:??? 他のノードにあるPrologの定義域に自分と共有するもの、 基底クラスというかコモンセンスといった方が良いか、 そんなものがあるかというと、これがほとんどない。 暗い霧のなかで未知の人に遭遇したとき、どうすうれば よいかというようなレベルです。探りをいれていく。 すこしづつ質問していって、相手の世界の輪郭から掴んでいく。 これをPrologシステムにも適用したいのだが、きっかけからして わからない。 「あなたは何に興味があるの」 こういう質問への答えを的確に準備したシステムに出会ったことが ない。 : DNS未登録さん [sage] 2006/04/04(火) 09:06:39ID:??? 自分が利用できる関数を他の定義域で探すということは コンピュータサイエンスのどんなカテゴリーに入るのですか。 : DNS未登録さん [sage] 2006/04/04(火) 09:39:43ID:??? コンピュータサイエンスでですか。 プログラムパターンともちょっと違うし、 わかりません。 : DNS未登録さん [sage] 2006/04/04(火) 10:05:23ID:??? 一番普通にはtmpファイルにlistingして ダウンロードして解析ということになると 思いますが、ファイル転送はftpですか。 : DNS未登録さん [sage] 2006/04/04(火) 14:31:04ID:??? ftpdが起動されていることは必要条件ですね。 単なる負節起動の他に、Upload and Go も 基本動作としているので、ftpdを基本要件と するのが最もコストがかからず、安定する ようです。 私は自分のサイトとの通信では自前の 転送述語で済ませていますが。 : DNS未登録さん [sage] 2006/04/05(水) 12:50:07ID:??? それから、サーバー側でファイルに書かずに 質問として扱う、 ?- node_1 :: 述語表示(hoge). や ?- node_1 :: 述語表示(hoge,X). も勿論あります。 : DNS未登録さん [sage] 2006/04/05(水) 16:43:43ID:??? 情報(この場合述語定義)の類似性や変更の推移に関する記述というと、 フレームでカバーできますね。多層フレームなんて、面白そうです。 あるメソッドがあるオブジェクトに属しているというのは考えてみれば 面白くありませんから。 : DNS未登録さん [] 2006/04/06(木) 10:32:34:0Hhh/piQ 並列実行は可能ですか。 1) 複数サーバにたいするOR並列 2) Prologを拡張してのAND並列 : DNS未登録さん [sage] 2006/04/06(木) 11:18:20ID:??? 2)はやっていません。KLIC上にこれと同じネットワークを 構築しようとしてみましたが、現在の所失敗しています。 1)はそういう述語はあります。ただ、遅くてあまり使い物には なっていません。 各ノードで1秒かかる質問を用意して、4ノードに質問して、 全ての解を蒐集すると5秒くらい掛かってしまいますw 各サーバがログを取っていて、その書き込み量が膨大に なるせいですが、解を蒐集するのに自分のノードのサーバに assertしてもらう方式をとっているので、書き込まれているかな、 とポーリング方式で問い合わせが必要でこれにコストがかかって しまっています。 1分くらいかかる作業を要求すれば1分15秒くらいで終了しますから、 これはりっぱなものですが、現実にはこういう計算って発生しませんね。 最初に解を返したノードのものを解とするケースでは結構有用です。 : DNS未登録さん [sage] 2006/04/06(木) 11:58:18ID:??? 1分15秒というのは10ノードの並列時のことでした。 4ノードだと、1分4秒くらいですね。 : DNS未登録さん [] 2006/04/08(土) 10:26:28:MsM98g7K Ajaxなどで非同期通信ということが喧伝されていますが、 このネットワークで非同期通信は可能ですか。 : DNS未登録さん [sage] 2006/04/08(土) 10:42:29ID:??? 以下で述べているエージェントとサンプルの 送信がそれに当たります。エージェントの場合は サーバ側で永続しますが、質問が解決したら終了する モードだと非同期処理と見なせます。 Ajaxがメジャーな技術になるなら、これ経由で 質問できるようにすれば面白そうですね。 w3mは開発が終っているし、Javascriptも 組み込めないからだめですが、 オープンソースのこの手のブラウザ経由という 可能性はあります。 : DNS未登録さん [sage] 2006/04/08(土) 16:13:17ID:??? ところで話は変わりますが、10年くらい前に、 事務処理のデータエントリーのプログラムで、 サーバーが側から、エントリー側に画面をpushし、 入力を促して、非同期にこれを受け取るという システムの構築に困難を感じた事があります。 現在は、 1) アプリケーションタスクはエントリー側のサーバーに mozillaのremote処理を要請 2) エントリー側でブラウザに入力画面の表示 3) アブケーションタスクは自ノードサーバへの入力待ち合わせ 4) formにより、データ処理サーバ側にデータ送付 4) アプリケーションは自ノードサーバからデータ受け取り で簡単に実現しています。 : DNS未登録さん [sage] 2006/04/09(日) 04:04:59ID:??? 郵便、黒板、電話的な要素が混然としていますねw : DNS未登録さん [sage] 2006/04/10(月) 11:31:35ID:??? 一般的RPCコールに比べて、Prologであることの 優位性は何でしょう。 : DNS未登録さん [sage] 2006/04/10(月) 11:43:47ID:??? Prologであること。としか言い様がないです。 ・ 頑強なインタプリタ。 ・ 簡素な構文。 ・ 強力な構文解析力。 ・ 強力なデータベース。 ・ 強力な論理的記述力。 ・ 構造変換など強力なメタプログラミング。 どれをとっても(MLの系統を除くと)比類ないものです。 : DNS未登録さん [sage] 2006/04/10(月) 12:02:31ID:??? プログラム言語は最終的には MLとPrologの一騎打ちになるとお考えですか。 : DNS未登録さん [sage] 2006/04/10(月) 12:15:14ID:??? はい : DNS未登録さん [] 2006/04/11(火) 08:19:23:pQqjlZKi ICOTの成果でPrologで書かれたものが公開されて ますよね。あれが、 ?- prolog_aitec_lib :: hoge(_). みたいな感じで簡単に利用できたらいいですね。 : DNS未登録さん [sage] 2006/04/11(火) 09:03:17ID:??? 昨年限りで、AITECも完全に廃止となり、サイトも消滅。 私は、ほとんどダウンロードしてあるのですが、 アーカイブしとかなかったから、何がなんだかわからない。 ひとつふたつ余りREADMEを読まずに動いたものがあった。 ただし,4-5年前の記憶。 : DNS未登録さん [sage] 2006/04/11(火) 11:54:00ID:??? 1980-2000年の間に上記のものや 単行本を含む文献上のPrologソースコード量は 膨大なのですが、実際に質問として使用できる 状態のものはほとんどありません。 著作権上の問題がありますが、これを可能な限り 生き返らせることに余生を捧げましょうw : DNS未登録さん [sage] 2006/04/11(火) 16:01:37ID:??? 本当に高水準言語一辺倒の時代なんて くるんですかねー : DNS未登録さん [sage] 2006/04/12(水) 09:44:34ID:??? K-Prologを使っているのですが、system述語を実行するとき ストリームを切り替えてPrologの引数に単一化したいのですが なにか方法はありませんか。 : DNS未登録さん [sage] 2006/04/12(水) 10:20:18ID:??? C言語インターフェイスを使って、 system/2を作る。他ない? シェルコマンドの出力をあるファイルに リダイレクトして、制御が返ってきたら、 plc側でopen()する。この場合、ファイル名 が固定されるから、2システム以上の並列だと 具合が悪い。 C言語インターフェイスでtmpnam/1作って おいた方がよい。 : DNS未登録さん [] 2006/04/12(水) 11:42:56:IFSrcVZi やはり、popenは組み込み述語として欲しいね。 OSに依存する余地から、避けたいというのは わかるけれど。 : DNS未登録さん [] 2006/04/12(水) 11:44:43:IFSrcVZi 依存する余地から -> 依存するから : DNS未登録さん [sage] 2006/04/12(水) 14:05:48ID:??? 他のノードでsystemなどは実行できるのですか。 : DNS未登録さん [sage] 2006/04/12(水) 14:15:54ID:??? できます。できますが、そのノード(サーバー)の設計によります。 セキュリティを重視して拒否することはできます。 一般には ?- 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 がクライアント側画面にで表示されています。 : DNS未登録さん [sage] 2006/04/12(水) 14:21:46ID:??? 実現方法は? : DNS未登録さん [sage] 2006/04/12(水) 14:32:16ID:??? 上流は省略します。 応答のソケットはHeaderの後、 2行改行の後、変数解決済みの質問がきます。 ?- findall(append([a,b],[c,d],X), append([a,b],[c,d],X), [append([a,b],[c,d],[a,b,c,d])]). この後にサーバ側のに書いたバッファーの内容が続きます。 それだけです。 : DNS未登録さん [sage] 2006/04/12(水) 14:37:56ID:??? の後の例ですと ?- findall(!pwd,!pwd,[!pwd]). /usr1/local/prolog がソケットの中身です。 ここではのサーバ側からのpush(対話応答)は 行っていません。 : DNS未登録さん [sage] 2006/04/12(水) 15:48:11ID:??? クライアント -> サーバも 最初に2行連続して改行された後の文を 質問と見なしてparseします。 2行改行されるまではHeaderであり、 何が書かれていてもよいというルールです。 : DNS未登録さん [sage] 2006/04/14(金) 12:35:53ID:??? 文字コードのエンコーディングやReferURL情報等 一切なしですか・・・。 : DNS未登録さん [sage] 2006/04/14(金) 17:10:09ID:??? いや、Headerを解析してhttpプロトコルのHeaderだったら、 当然取得しておく。 何を以てプロトコルを認識するかは決めていない。 : DNS未登録さん [sage] 2006/04/15(土) 06:29:09ID:??? ICOTの開発したプログラムは ttp://http://www.icot.or.jp/ARCHIVE/Museum/IFS/abst/XXX-J.html から現在でも入手できます。(XXは001-100) : DNS未登録さん [] 2006/04/15(土) 08:06:02:jel5navj 以前ム板で、PrologのユーザやベンダはPrologは libraryをあまり作りたがらない、実際その時に 書けばよいから、作る必要がない。 と書いたら、「正規表現は作れますか」ときた。 Prologで正規表現なんて使わないよ。なんで そんなの覚えなくちゃならないの?って答える べきところをオタフタして答え損なったw。 正規表現は一種の言語だから論外としても、 辞書引き問題はこういうネットワークでは 結構深刻ですね。辞書、ここでは他ノードに たいするlistingですが、これを引くコストは ばかにならない。自分で書いた方がとどうしても 思ってしまう。 : DNS未登録さん [sage] 2006/04/15(土) 11:51:27ID:??? Prologの場合要約っていうのができないからね。 コード自体が要約だw : DNS未登録さん [sage] 2006/04/15(土) 17:06:35ID:??? つまりperlとかの方が開発効率が良いと言うことですね。 : DNS未登録さん [sage] 2006/04/15(土) 17:52:27ID:??? 一般論としてですが、ライブラリが揃っていて、 その使い方を熟知している場合、開発効率は 高くなりますね。 ここでの文脈で言うと、知識(たとえば正規表現の 記法)を得るためのコストとプログラム作成時の 速度差の累計で評価しなくてはならないでしょう。 Javaのように言語を熟知していても、クラス名や メソッド名が妙に長くて、効率が上がらないケースも ありますが。Eclipseとかを駆使しない場合ですが。 Prologのような言語はライブラリ知識獲得のコストは ゼロだということになります。常にその場でリスト処理で 済ませますから。 : DNS未登録さん [sage] 2006/04/15(土) 18:10:58ID:??? Prologで使う述語といえば member,repeat,forの他には、 副文字列を切り出す part_atom 文字列(atom)をリストに変換する atom_chars,atom_codes それから複数のatomを結合する concat_atom くらいのものです。 これだけで、他のインタプリタと同等の 速度で対話実行ができるわけですから、 少なくとも初心者向きなのはこちら ということになります。 : DNS未登録さん [sage] 2006/04/15(土) 18:12:22ID:??? ごめんなさい。findall を落としました。 : DNS未登録さん [] 2006/04/15(土) 18:22:16:jel5navj 先輩 true,fail,not,open,close,read,get_char,get_code, consult,reconsult,assert,retract,abolish が抜けてますよw まあ、これで全部か。 : DNS未登録さん [sage] 2006/04/15(土) 18:38:08ID:??? ハハハ まだあるぞ。write,put_code,put_char fuctor,argも使うね。 30個くらいにはすぐなっちゃう。 結構、知識がいるね。 : DNS未登録さん [sage] 2006/04/15(土) 18:53:41ID:??? この際、思惑抜きに使う述語をあげてみよう。 上記の他に、 integer,float,number,atom,atomic,var,compound,の型判定述語 is,=も述語だ。 predicate_typeなんかも使うことがある。 それから述語ではないが関数も覚えなくちゃ。 まあ、こんなものだが、7-8割が member,fail,true,atom_part,concat_atomで済むか。 : DNS未登録さん [sage] 2006/04/16(日) 05:46:29ID:??? もしかすると一番重要な述語 system が抜けていた。 ファイルから情報を読み取るか、Prologプログラムとして、 あらかじめconsultしておくか、流儀はいろいろあるが、 基本的な組み込み述語の使用頻度はどんなプログラマでも 大差ないのがPrologの特徴かな。 : DNS未登録さん [sage] 2006/04/17(月) 14:08:42ID:??? 結局、Prologも使いこなすにはそれなりの知識がいる、と。 達人を集めて競わせるとどの言語も生産性に差はでない。 でも、PerlとPrologくらい目指す方向が異なると、 初心者、初級者、中級者、上級者とそれぞれの段階で 生産性に差が出てくるような気がする。実証というのは 難しいだろうが、面白いテーマなのでちょっと研究してみる。 : DNS未登録さん [] 2006/04/17(月) 14:23:22:wrBcmWfA 初心者: 試合開始1秒 面が決まりPrologの勝ち。 3時間で全ての機能を覚えられるからね。 : DNS未登録さん [sage] 2006/04/17(月) 14:28:02ID:??? いや、PerlだってCGI絡みにしなければそのくらいで説明できないか。 : DNS未登録さん [] 2006/04/17(月) 14:31:35:Qe0R37ZJ 無限に拡がる軟体動物みたいなやつです。 無理ですね。 : DNS未登録さん [] 2006/04/17(月) 14:41:56:FRz6ud02 ム板なんかにプログラムの基本っていうことをいう人がいる。 私はプログラミングに基本なんてないと思うが、この人達の いう基本以外、Prologのプログラミングでは使わない。 一方、Perlの方は、ぜんぶ応用という感じで、基本部分の抽出 なんてばかばかしくなる。そういう意味で大変魅力ある言語 だと思う。 : DNS未登録さん [sage] 2006/04/17(月) 14:49:00ID:??? つまり、Perlの場合全部「逆引き」で攻めていくって感じ? : DNS未登録さん [] 2006/04/17(月) 14:54:32:lp7KF6SW ライブラリ=「逆引き」ですよ : DNS未登録さん [sage] 2006/04/17(月) 14:55:43ID:??? わかったから、sage進行にしてくれない。なにか恥ずかしい。 : DNS未登録さん [sage] 2006/04/17(月) 18:28:10ID:??? Perl的な部分が利いてくるのは中級者から? : DNS未登録さん [sage] 2006/04/17(月) 18:34:29ID:??? ところで >この人達のいう基本以外、Prologのプログラミング使わない。 なんか、日本語がヘンなようで。 この人達のいう基本しか、Prologのプログラミングでは使わない。 じゃないか。 : DNS未登録さん [sage] 2006/04/18(火) 07:18:30ID:??? 考えてみると、Perlのような言語がPrologより 生産性が高い?という議論にマジで応対している のだから、驚くべき事だ。20年前にはPrologの 生産性は群を抜いていた。Lispの倍くらいの 速度で仕上がっている感覚だった。 私はRubyくらいしか使わないが、これもしかすると Prologといい勝負いけるんじゃないかと思うことが ある。 ここ二十年のプログラム言語のの記法レベルの洗練は 相当なものだ。 : DNS未登録さん [sage] 2006/04/19(水) 19:55:59ID:??? APLなどがそうだったと思うが、 素人が見ると何が書いてあるかさっぱりわからない。 達人から見るとこんな易しいものはない。 こういう言語は滅びる。Perlなどもちょっとこういう 臭いがする。 : DNS未登録さん [sage] 2006/04/20(木) 08:23:05ID:??? 略記法に?というものは多いが、 基本的には、 Perlはただ書けばよいだけで、 素直なものだと思うが。 : DNS未登録さん [] 2006/04/22(土) 10:45:33:ENgCktJU .NETではPrologは完全に無視されているようですが その辺りの情報は何かありませんか。 : DNS未登録さん [sage] 2006/04/22(土) 10:51:29ID:??? マイクロソフトがPrologを避けている理由や 経緯については全く知りません。内部資料と してはその理由が記述されたものがありの だろうから、社員が書き込んでくれると ありがたいのですが。 : DNS未登録さん [sage] 2006/04/22(土) 19:38:08ID:??? バッチ処理、Prologの負節実行をある時刻に 起動するような場合がありますね。他の コンピュータのPrologの場合どんな手順に なるのしょうか。 : DNS未登録さん [sage] 2006/04/22(土) 19:55:13ID:??? 私は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情報を付加して質問をしっぱなしの仕様です。 : DNS未登録さん [sage] 2006/04/22(土) 19:56:29ID:??? concat(['chmod 777 ',F],S), は concat_atom(['chmod 777 ',F],S), の間違いです。 : DNS未登録さん [] 2006/04/22(土) 20:00:36:whEFssI9 cgi述語表現の定義も教えてください。 : DNS未登録さん [sage] 2006/04/22(土) 20:07:05ID:??? cgi述語表現(Network,PORTNO,_述語,_CGI述語表現) :- url述語表現(_述語,_URL述語表現), concat_atom([' ttp://http://',Network,:,PORTNO,prolog_file,'?query=%3F-+',_ URL述 語表現],_CGI述語表現), ! . url述語表現は例の漢字コードの変換です。 : DNS未登録さん [sage] 2006/04/27(木) 19:27:58ID:??? httpプロトコルなのですか? : DNS未登録さん [sage] 2006/04/27(木) 19:32:27ID:??? この場合はそうです。 基本的にサーバーが要求するポート番号は自由です。 80を指定しているサーバーだと、多分httpを期待してる のだろうと考えてhttpのheaderを付加して送りますね。 : DNS未登録さん [sage] 2006/04/27(木) 19:35:21ID:??? 遅くないですか? : DNS未登録さん [sage] 2006/04/27(木) 19:38:13ID:??? 遅いですw でも、セッション数などは変わらないわけですし、 若干Headerの情報が多いという程度ですから、実際は どんなプロトコルでも似たようなものですね。 インターネット経由の場合は。 : DNS未登録さん [sage] 2006/04/27(木) 20:15:55ID:??? クライアント側でmozillaのようなブラウザを介して、 ハンドリングすると極端に遅くなりますね。 コマンドの解読はたいしたコストではないと思いますが やはりバッファーかなんかを確保するので時間がかかる のでしょうか。w3cなんかそんなことしてないと思うの ですが、やはり少しかかりますね。 : DNS未登録さん [] 2006/04/28(金) 11:45:47:Kl9Nx86D socket関係が組込述語になっている処理系というと どんなものがありますか。 : DNS未登録さん [sage] 2006/04/28(金) 20:39:20ID:??? 私は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 です。 : DNS未登録さん [sage] 2006/04/29(土) 05:41:34ID:??? 前にIF/Prologの販売は2004年で停止となったと 書きましたが、どうもヨーロッパでは販売されて いるようです。日本のIF/PrologのB氏がそんな ことをいっていました。 直接ヨーロッパ向けのWebサイトで購入できそうです。 ただ、個人で買うには高いですね。人に勧めるのを 躊躇する価格帯です。 : DNS未登録さん [sage] 2006/06/02(金) 14:24:12ID:??? 最近IF/Prologのサイトを見たが、日本SGIのマシン上では 販売を続けるらしい。日本SGIのUNIXマシンにインストール してということなので、日本SGIの将来が不透明でこの話も どうなるかわからない。 : DNS未登録さん [sage] 2006/06/06(火) 08:57:13ID:??? GNUにPrologぐらいあるんだが。 ttp://http://pauillac.inria.fr/~diaz/gnu-prolog/ 気に入らないなら、codeをcontributeしまくって、自分好み に誘導するのがbestだよ。 ...日本のprolog屋がC/C++なんて書けるはずもないか。 無意味な論文積み上げて、博士や大学教員になる事しか考えて ないからな。 : DNS未登録さん [sage] 2006/06/06(火) 09:59:03ID:??? 書き込みありがとうございます。 私は研究者ではありませんが、C/C++はほとんど使わないので、 gやSWIの拡張は日本語処理の部分以外試みたことがありません。 これまで使ってきたものを取り上げることが多くなります。 SWI-Prologの利用の方が優勢だと思いますが、gprologも大学での 利用は多いはずです。これこれの処理をするには、 どんな組込述語を用意すると便利かの一覧を用意するといいのでしょうね。 : DNS未登録さん [sage] 2006/06/17(土) 19:40:53ID:??? 上の方の質問と応答が痛々しい程に自演臭い。 : 118 [sage] 2006/06/18(日) 14:04:39ID:??? >120 てめー、腐れProlog屋と一緒にすると頃すぞ。 : DNS未登録さん [sage] 2006/06/18(日) 18:45:34ID:??? 「上の」じゃなくて「上の方の」だろ。 〜64あたり、 やたら丁寧な記者みたいな質問と やたら早い反応の返答。 どう考えても不自然だ。 : DNS未登録さん [sage] 2006/06/21(水) 07:34:49ID:??? 完全な自演ではありませんが、うちの社員との Q & A です。 質問者もかなりわかった人間です。 : DNS未登録さん [sage] 2006/06/21(水) 07:49:43ID:??? 要するに、 Prologを利用するときは同時に 共用Prologデータベースも立ち上げるべきだ、 という主張をしているスレなのです。 : DNS未登録さん [sage] 2006/07/23(日) 09:32:55ID:??? 実用上、特に重要と 思われる組込述語を列挙すると(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 かな : DNS未登録さん [sage] 2007/06/12(火) 11:06:22ID:??? PrologをServer+Clientで立ち上げるという趣旨には大賛成。 ただ、通信部分はPrologの項を生で送るのはどんなものか。 SOAPに変換したらどうだろう。 : DNS未登録さん [] 2007/06/18(月) 16:21:26:qQekVywy Linux上にIF/Prologで構築されているようですが、 WindowsでP#でもうまくいくでしょうか? : DNS未登録さん [sage] 2007/06/18(月) 17:17:59ID:??? およそ一年ぶりの書き込みになります。ageていただかなかったら 永久に気が付かなかったかも知れません P# ! 知りません。3年くらい前にちらっとそんな話題が あったような記憶があるのですが、マイクロソフトと関係が あるのですか。 : DNS未登録さん [sage] 2007/06/18(月) 17:26:07ID:??? XMLでのデータ授受は有力ではないでしょうか。 私はSOAPの詳細を知らないので気の利いたコメントは できませんが、Prolog以外の言語に対してサーバーの 立場を取るとなると、クライアントの処理言語に対して Prologの解析系を持てというのは現実的でないでしょう。 Prolog-XML変換はどこにでもあるのだから、Prolog側で XML変換してあげればよい。 実際私は、XBRL(XMLベースのビジネス用通信形式テンプレート)と Prolog項の変換の仕事をしたばかりです。 : DNS未登録さん [sage] 2007/08/01(水) 04:14:37ID:??? 1980年代のProlog資料をまとめてあるサイトないかな。 : DNS未登録さん [sage] 2007/10/31(水) 18:35:10ID:??? 最近、Erlang との連携を始めました。TCP/IP経由で Erlangをさらにサーバに見立てて、並列(平行)処理を 委託します。ただ今のところEUC-JPの漢字処理が うまくいかず、Erlang側のプログラムはあまり凝った ものが作れません。漢字処理が問題がある場合、 ソースに遡れば大概は上手くいくことが多いのですが、 Erlangはconfigure->make->make install で8時間くらい かかる代物で、とても私が手を出せるものではありません。 : 訂正 [sage] 2007/10/31(水) 18:48:23ID:??? ただ今のところ -> ただ、今のところ 漢字処理が問題がある場合、 -> 漢字処理に問題がある場合、 : DNS未登録さん [sage] 2007/11/05(月) 12:10:17ID:??? 何故にErlangが出てきたかという話をしておきます。 これはスケジューリング問題と関係があります。 Prologはスケジューリング問題の解決に最適な言語ですが、 これは「勤務表」のようなあまり、時間的な要求の厳しくない 領域を対象とした場合です。 ライン制御のような部分でのスケジューリングとなると コードとしては洗練されたものになりますが、やはり、 GCによる遅延の問題がある。ラインの流れに追いつけなく なる可能性があります。これを回避する方法はやはり、 その遅延が致命傷になる部分だけは切り離して、Prolog外で 処理するほかない。 そこで、Prologからのコード変換が容易で、小プロセスを 生成できて、並列による非同期処理が書きやすいErlangが でてくる。 今のところは、Prolog/Erlang変換の研究の域をでませんが 相当に有望なのではないかと思います。 : DNS未登録さん [sage] 2008/04/10(木) 12:24:36ID:??? INAP'96で日本では初めてのErlangチュートリアルが あったのですが、当時10年の歴史がある言語なのに、 ほとんど知ってる人いなかったですね。最近の流行は 隔世の感ありです。 : DNS未登録さん [sage] 2008/04/12(土) 10:46:47ID:??? Wijaという環境上に構築されるオーバーレイGHCというものが あります。例の未踏ソフトの一つなのですが、PrologとGHCの 違いはありますが、やりたいことはたいへん似ているようです。 残念ながらうまく起動できなくて、今のところ私のサーバーと 混在できていません。今週はこれがテーマ。 : DNS未登録さん [sage] 2008/04/30(水) 04:35:35ID:??? Wijaの方は進んで以内が、昨日、erlangサーバがevalしていなかったのを ム板のErlangのスレのレスでのやりとりで、方法が分かったので書き換えて完成。 幸せ。 これまでは関数の機能番号と引数を一行づつ渡していた。functorで分解した ような状態で。 : DNS未登録さん [] 2008/06/05(木) 10:51:17:gGkN7ojL Erlangサーバについてですが、 Prologサーバからさらに Erlangサーバに要求をだすということですよね。 Erlangプログラムのuploadはどうやるの? : DNS未登録さん [sage] 2008/06/05(木) 12:36:10ID:??? 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). ディレクトリはそれぞれホームディレクトリだとして。 : DNS未登録さん [sage] 2008/06/05(木) 12:37:44ID:??? すみません。 upload_and_eval(ErlangServer,ErlangModule,Eval_Function,X) :- でした。 : DNS未登録さん [sage] 2008/06/05(木) 13:06:17ID:??? 書き直します。 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). : DNS未登録さん [sage] 2008/06/05(木) 13:09:28ID:??? 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). の方が分かり易いか。 : DNS未登録さん [sage] 2008/06/05(木) 18:14:59ID:??? コピー元は自分だからPrologサーバで cp(ErlangModule.erl,ErlangServer::ErlangModule.erl), を実行すると、Prologサーバのワーキングディレクトリから ErlangModule.erlファイルをコピーしようとするはず。 これは具合が悪いから、cpはこの述語から切り離す他ないの ではないか。 : DNS未登録さん [sage] 2008/06/05(木) 20:14:18ID:??? そうでした。 : DNS未登録さん [sage] 2008/06/06(金) 04:53:10ID:??? 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). 一引数増やしました。 : DNS未登録さん [sage] 2008/06/06(金) 08:28:45ID:??? Wijaの オーバレイ GHC 使ってみましたが、私のPrologサーバとはまったく違うものでした。 詳しい報告はあとで。 : DNS未登録さん [sage] 2008/06/07(土) 05:50:01ID:??? 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 となる。大分すっきりした。 : DNS未登録さん [sage] 2008/06/07(土) 06:24:38ID:??? ErlangサーバにDownloadさせる仕様にできないか? Erlangサーバの関数を d_eval() が モジュール erlang_server にあるとする。 ?- X は e1::erlang_server:d_eval(c1,my:append([a,b],[c])). これで良さそうだが、Erlang側でd_eval() を解析評価する時に、 append/2が先に評価されてしまって多分うまくいかない。 : DNS未登録さん [sage] 2008/06/21(土) 05:49:22ID:??? コンパイルするべきモジュールを引数に分離して、しかも評価される関数を 文字列として渡してe_evalの中でさらに評価させる。 ?- X は e1::erlang_server:d_eval(c1,my,"my:append([a,b],[c])"). すっきりしない。 : DNS未登録さん [sage] 2008/06/21(土) 05:51:14ID:??? 二回に分離して質問するところを、強引に一回に納めた感じだ。 : DNS未登録さん [sage] 2008/09/19(金) 08:36:17ID:??? crontabなんかで質問を予約する場合もサーバにリクエストするんだよね。 どんなコマンドになるの? : DNS未登録さん [sage] 2008/09/19(金) 09:05:51ID:??? - 当たりにcrontabではありませんが、atコマンドでの 話が出ています。 : DNS未登録さん [sage] 2008/09/19(金) 09:21:09ID:??? サーバがポート番号1212で立ち上がって入れば、 :- tell(foo),listing,told. を定時に実行させたければ、 w3c ttp://http://localhost:1212/prolog.file?query=%3F-+tell%28foo%29+%2C+%28listin g%29+%2C+told という一行だけのバッチファイルを作ってこれをcrontab -e で登録すればいい。 予約は自分のマシンだが、実行は他のマシンと言う場合は、localhostが 実行マシンのドメイン名に置き換わるだけ。 : DNS未登録さん [sage] 2008/09/19(金) 14:17:11ID:??? 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 : DNS未登録さん [sage] 2008/09/19(金) 14:39:14ID:??? の場合はポート番号は明記されていないからDefault値が 使われる。ポート番号がDefault値以外の場合は、サーバを (_ドメイン:_ポート番号) :: で表現する。 : DNS未登録さん [sage] 2009/06/02(火) 15:22:52ID:??? 長い間関数評価述語として"is"の代わりに"は"を使ってきました。 しかし、Erlangサーバが充実してきたため、表記法を改めて、 今後は"<-"に統一しようと思います。 ?- X <- append([1],[a,b]). X = [1,a,b]; no ですね。 : DNS未登録さん [sage] 2009/06/02(火) 15:47:01ID:??? 失礼。適切でなかった。統一してというのではなく、 Erlangの変数へのunifyが "->" なので これはPrologの評価述語であるということを明確にするため、 "<-"を採用しました。 : DNS未登録さん [sage] 2009/06/07(日) 03:46:34ID:??? そもそもPrologに P->Q1;Q2 なんていう構文があるのが間違ってる。 : DNS未登録さん [sage] 2009/12/02(水) 05:13:06ID:??? 四人一首問題のつづきです。 そもそも、サーバーから一音、一音、取り手に送り出すのはどうすればよいか? 取り手が突っつけば簡単だがそれでは本当らしくない。 サーバーが送り出す。相手は、取り手付属のサーバー。 この取り手付属のサーバーと取り手はこの歌の一音情報を 共有する必要がある。 : DNS未登録さん [sage] 2010/03/08(月) 07:04:50ID:??? Erlangを関数呼び出しする場合、 関数評価述語として「は」を使っているようだが、 単純に中置演算子 erlang とした方がいいんじゃないかな。 : DNS未登録さん [sage] 2010/03/08(月) 08:26:05ID:??? _値 erlang _erlang関数 ですか。 ..., A は _式1, B は _式2, C は _式3, ... , で、ある時 _式2 を _erlangサーバ::_モジュール:_eralang関数, として評価する。こういう想定がありうるとするとやはり「は」に 統一されている方が好ましいように思います。erlangであるかどうかは _erlangサーバの定義に係かってくることになります。 : DNS未登録さん [sage] 2010/10/28(木) 10:07:28ID:??? サーバ 一単位あたりのプログラムサイズはどのくらいになるの? : DNS未登録さん [sage] 2010/12/13(月) 22:19:39ID:??? 最小だと4MBくらいかな。 最初にスタックサイズを指定して起動するので、 そのデフォルト値をどう書き換えるかという問題に なります。 : DNS未登録さん [] 2011/02/28(月) 08:43:35.41:TEJDJ3BB swi-prologを商用利用すると どれぐらいお金いるんだろう? : DNS未登録さん [sage] 2011/03/02(水) 12:36:19.16ID:??? ttp://http://www.swi-prolog.org/license.html このページの内容は、 私の英語力では意味不明です。 : DNS未登録さん [] 2011/03/03(木) 21:18:30.51:1LopfZ9I そうだよなー。わかりにくいよ。 : DNS未登録さん [] 2011/03/03(木) 21:20:24.17:1LopfZ9I Non-free (open or proprietary) software can be produced using SWI-Prolog, although contributed pure GPL components cannot be used. 作成したものを公開すればOKってことなのか? : DNS未登録さん [sage] 2011/03/04(金) 12:51:31.34ID:??? この翻訳から離れて、私が勝手に理解して いるつもりになっているものは、 利用者からソースコードの開示を求められた 時には公開しなくてはならない。というこの一点。 以前は商用でソースの開示は考え難いことだったが、 現在ではごく当たり前のこと。商用であっても、 GPL、LGPL規約に「違反しない限り」課金されることはない。 SWI-Prologもこの範囲内にあるソフトだと思う。 : DNS未登録さん [sage] 2011/04/20(水) 18:04:00.40ID:??? ?- prologサーバ :: 生きている. yes. ?- : DNS未登録さん [sage] 2011/04/20(水) 18:05:41.58ID:??? ?- prologサーバ :: 何してる(_何してる). _何してる = 暇してる. yes ?- : DNS未登録さん [sage] 2011/09/20(火) 05:56:36.56ID:??? Erlang が異様に流行りだしました。もう一度、PrologからErlangを呼び出す インターフェイスの話をまとめてください。 : DNS未登録さん [sage] 2011/11/01(火) 00:30:34.89ID:??? Erlangてアーラン? : DNS未登録さん [sage] 2012/07/04(水) 22:47:19.64ID:??? test : DNS未登録さん [] 2012/10/17(水) 10:23:46.83:YFrysNEg ム板でスレたて荒らしが現れた所為で、最近たてられたスレが全部DAT落ち処分されている。 ここのように平和なスレでも書き込むことはもちろん、時々はageておいた方がいいかも。 : DNS未登録さん [sage] 2012/10/23(火) 10:15:12.27ID:??? Javascript上にPrologを建てて、 Prolog(Javascript) <-> Prolog <-> Prolog(Javascript) という制御の勉強を復活させようと思います。 以前作っていたものは、ノートパソコンのディスククラッシュとともに ほとんどが消え去ったので、もう一度作り直さなくてはならないから、 少し時間をください。 : DNS未登録さん [sage] 2014/07/30(水) 18:51:27.65ID:??? 永くIF/Prologを使ってきたこのサーバーもSWI-Prologへの引越しが近くなってきた。 : DNS未登録さん [sage] 2015/02/21(土) 13:21:00.67ID:??? えっちぃ絵をリクエストすると誰かが描いてくれるかもしれない素敵なスレ【R-18】 ttp://http://hayabusa.o p e n 2ch.net/test/read.cgi/news4vip/1423739321/ : DNS未登録さん [] 2016/11/17(木) 10:40:15.40:lo+7nJq0 最近のLinuxなんかだと、w3cが動かないものがあるようだ。 # w3m -debug ttp://http://localhost:1212/ ・・・ でよいのかな。 : DNS未登録さん [sage] 2016/11/25(金) 11:07:28.04ID:??? SWI-PrologのPrologサーバのトップ サーバ(_ポート) :- tcpソケットの準備(_ソケット,_ポート), 接続されたらソケットを開く(_ソケット, AcceptFd, _), tcpインタプリタ(AcceptFd). tcpソケットの準備(_ソケット,_ポート) :- tcp_socket(_ソケット), tcp_bind(_ソケット, _ポート), tcp_listen(_ソケット, 5). 接続されたらソケットを開く(AcceptFd,_ソケット,_Peer,In,Out) :- tcp_accept(AcceptFd, _ソケット, _Peer), tcp_open_socket(_ソケット, In, Out). tcpインタプリタ(AcceptFd) :- repeat, 行を読みだして実行(AcceptFd), fail. : DNS未登録さん [sage] 2016/11/25(金) 11:12:57.76ID:??? 冒頭に以下の行が入るのだった。 :- use_module(library(socket)). サーバ(_ポート) :- ・・・ : DNS未登録さん [sage] 2016/11/25(金) 11:18:10.14ID:??? % 以下つづく。本当は親タスクにassertできたりするがここでは省略。 tcpインタプリタ(AcceptFd) :- repeat, 行を読みだして実行(AcceptFd), fail. 行を読みだして実行(AcceptFd) :- 接続されたらソケットを開く(AcceptFd,_ソケット,_Peer,In,Out), 一行読み出し項に変換(In,_項), インタプリタの実行(_ソケット,In,Out,_項). インタプリタの実行(_ソケット,In,Out,_項) :- thread_create(項を実行して結果を返す(In, Out, _項),_,[]). 項を実行して結果を返す(In, Out, _項) :- ( catch(_項,_エラー情報,エラー情報の送信(Out,_エラー情報)); _項=false),!, 情報を送信する(Out,_項), ストリームを閉じる(In,Out). : DNS未登録さん [sage] 2016/11/25(金) 11:20:15.37ID:??? 一行読み出し項に変換(In,_項,_エラー情報) :- 行入力(In,_行), 行を解析して項を得る(_行,_項,_エラー情報). 行を解析して項を得る(_行,_項,_エラー情報) :- catch(read_term_from_atom(_行,_項,[]),_エラー情報,_項 = false). 行入力(In,_行) :- read_line_to_codes(In,Codes), atom_codes(_行,Codes). エラー情報の送信(Out,_エラー情報) :- format('~w\n',[_エラー情報]), format(Out,'~w\n',[_エラー情報]). 情報を送信する(Out,_項) :- 項を文字列に変換する(_項,_文字列), 書き出す(Out,_文字列). 書き出す(Out,_文字列) :- format(Out,'~w\n',[_文字列]), flush_output(Out). 項を文字列に変換する(_項,_文字列) :- swritef(String,'%t',[_項]), string_to_atom(String,_文字列). ストリームを閉じる(In,Out) :- close(In), close(Out). 送信項と受信項の単一化(_項,_項). エラー発生時はfail扱い :- fail. : DNS未登録さん [] 2016/11/25(金) 11:35:27.58:3qBnIHqR ここの十数行がやはり大事で、ここさえ押さえれば、サーバプログラムは大丈夫。 同じく省略しているが 行を読みだして実行/1 の冒頭で GET/POST行の解析等が 来るから、ここからの分岐は実際はもう少し重くなる。Prolog項が取れてからは 単純だが、副作用として出力をどのように処理するか、クライアントとどこまで 協調するかなど、実際の設計は難しい。 : 182 [sage] 2016/11/25(金) 11:38:00.92ID:??? 「副作用としての出力をどのように処理するか」 だな。 : DNS未登録さん [sage] 2016/11/26(土) 12:19:06.52ID:??? クライアントから述語呼び出しを findall(_述語,_述語,L) に一皮被せて 対話(findall(_述語,_述語,L),Q) とするという方法もある。 サーバーはLに述語の解リストを返すが、それと共にQにクライアントが 次に取るべき行動を指示する。例えば Q に see_other(' ttp://http://xxx.org/tmp/fileaaa.html') が入ってきたりする。 このQをクライアントが受け取り、call(Q) することでサーバーが用意した htmlファイルをクライアント側のブラウザに表示できる。 : DNS未登録さん [sage] 2016/11/26(土) 17:43:46.04ID:??? これでクライアントがProlog処理系である場合はうまく行く。それでは、 クライアントがChromeのようなブラウザであり、actionでサーバアドレスや ポートを指定し、inputやselectタグで述語引数情報を送ってくる場合は どうか。 対話の相手がブラウザてあると、対話/2もfindall/3も理解してくれない。 この場合はhtmlファイルを直接、Socketのストリームに出力する必要が あるだろう。もしそうだとしたら、それではクライアントがProlog処理系 であるか、ブラウザであるかはどの見分ければよいのだうか。 : DNS未登録さん [sage] 2016/11/26(土) 17:52:56.95ID:??? 最後の行を訂正する。「ブラウザであるかをどのように見分ければ良いのだろうか」 有力な方法としてinputとタグとしてname=定義域 value= に固有のブラウザ名~ 入れておくという方法がある。サーバは定義域としてget/post情報の中の 定義域キーの情報を調べて、この中に登録済みのブラウザ名を値として発見 した場合はクライアントはブラウザとして振る舞う。これが一番簡単な解決法 であろう。 : DNS未登録さん [] 2016/12/22(木) 06:28:13.86:TSmzxuJg この話よくわからないのですが、 Prologクライアントからの質問には、質問の項を解決したものを返す。 ブラウザからの質問には、たとえば Moved Temporarily ステータスで 再度参照するべきファイル名を返す。というようなことですか。 : DNS未登録さん [sage] 2016/12/26(月) 23:10:43.86ID:??? 基本的にはそういう話です。 ブラウザへの応答は必ずしも別ファイルに書いてから Moved Temporarily や See Other を返すのではなく、直接 ストリーム出力するのでもよいと思います。 ここ暫くは、最も悪影響が少なくブラウザであるか、 Prologクライアントであるかを判断させるサインの出し方の 話でした。 : DNS未登録さん [sage] 2018/02/19(月) 21:25:18.65ID:??? ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したキャッシュです。元のページはこちら 。削除についてはこちら 。