Prologサーバー
: Prolog [takao@ozaki.name] 04/12/10 16:02:13ID:??? Prologサーバー網の構築に向けて、 ・ Prologサーバーとはなにか ・ Prologサーバーの共通仕様、機能 ・ プログラミング技術 ・ セキュリティについて 論じましょう。 : 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勢いランキング が作成したキャッシュです。元のページはこちら 。削除についてはこちら 。