08/06/05 10:51:17 gGkN7ojL
Erlangサーバについてですが、
Prologサーバからさらに
Erlangサーバに要求をだすということですよね。
Erlangプログラムのuploadはどうやるの?
138:DNS未登録さん
08/06/05 12:36:10
>>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未登録さん
08/06/05 12:37:44
すみません。
upload_and_eval(ErlangServer,ErlangModule,Eval_Function,X) :-
でした。
140:DNS未登録さん
08/06/05 13:06:17
書き直します。
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未登録さん
08/06/05 13:09:28
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未登録さん
08/06/05 18:14:59
>>141
コピー元は自分だからPrologサーバで
cp(ErlangModule.erl,ErlangServer::ErlangModule.erl),
を実行すると、Prologサーバのワーキングディレクトリから
ErlangModule.erlファイルをコピーしようとするはず。
これは具合が悪いから、cpはこの述語から切り離す他ないの
ではないか。
143:DNS未登録さん
08/06/05 20:14:18
>>142
そうでした。
144:DNS未登録さん
08/06/06 04:53:10
>>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未登録さん
08/06/06 08:28:45
Wijaの オーバレイ GHC 使ってみましたが、私のPrologサーバとはまったく違うものでした。
詳しい報告はあとで。
146:DNS未登録さん
08/06/07 05:50:01
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未登録さん
08/06/07 06:24:38
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未登録さん
08/06/21 05:49:22
コンパイルするべきモジュールを引数に分離して、しかも評価される関数を
文字列として渡してe_evalの中でさらに評価させる。
?- X は e1::erlang_server:d_eval(c1,my,"my:append([a,b],[c])").
すっきりしない。
149:DNS未登録さん
08/06/21 05:51:14
二回に分離して質問するところを、強引に一回に納めた感じだ。
150:DNS未登録さん
08/09/19 08:36:17
crontabなんかで質問を予約する場合もサーバにリクエストするんだよね。
どんなコマンドになるの?
151:DNS未登録さん
08/09/19 09:05:51
>>150
>>104 - >>108 当たりにcrontabではありませんが、atコマンドでの
話が出ています。
152:DNS未登録さん
08/09/19 09:21:09
サーバがポート番号1212で立ち上がって入れば、
:- tell(foo),listing,told.
を定時に実行させたければ、
w3c URLリンク(localhost:1212)
g%29+%2C+told
という一行だけのバッチファイルを作ってこれをcrontab -e で登録すればいい。
予約は自分のマシンだが、実行は他のマシンと言う場合は、localhostが
実行マシンのドメイン名に置き換わるだけ。
153:DNS未登録さん
08/09/19 14:17:11
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未登録さん
08/09/19 14:39:14
>>153 の場合はポート番号は明記されていないからDefault値が
使われる。ポート番号がDefault値以外の場合は、サーバを
(_ドメイン:_ポート番号) :: で表現する。
155:DNS未登録さん
09/06/02 15:22:52
長い間関数評価述語として"is"の代わりに"は"を使ってきました。
しかし、Erlangサーバが充実してきたため、表記法を改めて、
今後は"<-"に統一しようと思います。
?- X <- append([1],[a,b]).
X = [1,a,b];
no
ですね。
156:DNS未登録さん
09/06/02 15:47:01
失礼。適切でなかった。統一してというのではなく、
Erlangの変数へのunifyが "->" なので
これはPrologの評価述語であるということを明確にするため、
"<-"を採用しました。
157:DNS未登録さん
09/06/07 03:46:34
そもそもPrologに P->Q1;Q2 なんていう構文があるのが間違ってる。