私はかなりプロローグに新しいです。私はPOSTにいくつかの問題があります。 は、これは私のプロローグ形式です:Prolog POSTハンドラー
`form([action='/game', method='POST'], [
p([], [
label([for=fromX],'From X'),
input([name=fromX, type=textarea])
]),
p([], [
label([for=fromY],'From Y'),
input([name=fromY, type=textarea])
]),
p([], [
label([for=toX],'To X'),
input([name=toX, type=textarea])
]),
p([], [
label([for=toY],'To Y'),
input([name=toY, type=textarea])
]),
p([], input([name=submit, type=submit, value='Submit'], []))
])`
、これが私のハンドラである:私は送信ボタンを押すと
answer('/game', Request) :-
memberchk(search(Search), Request),
memberchk(toX=ToX, Search),
memberchk(toY=ToY, Search),
memberchk(fromX=FromX, Search),
memberchk(fromYy=FromY, Search),
whiteTurn(ToX/ToY, FromX/FromY, White_N),
game_page(White_N).
が、私は内部サーバーエラーの目標は、予期せに失敗し得ます。誰かがこのハンドラを正しく動作させる方法を教えてください。今私はフォームからwhiteTurn関数にデータを進める必要があります、私は後に他の例外を処理します。ここで
は同じエラーで、実行可能な例である:
:- use_module(library('http/thread_httpd')).
:- use_module(library('http/html_write')).
:- use_module(library('http/http_session')).
:- use_module(library('http/http_error')).
server :-
server(3000).
server(Port) :-
http_server(answer,
[ port(Port),
timeout(20)
| []
]).
answer(Request) :-
memberchk(path(Path), Request),
answer(Path, Request).
answer(/, _Request) :-
title_page.
answer('/game', Request) :-
memberchk(search(Search), Request),
memberchk(toX=ToX, Search),
memberchk(toY=ToY, Search),
memberchk(fromX=FromX, Search),
memberchk(fromYy=FromY, Search),
whiteTurn(ToX/ToY, FromX/FromY, White_N),
game_page(White_N).
title_page:-
reply_html_page(
title('Draughts'),
[
h1('Draughts'),
form([action='/game', method='POST'], [
p([], [
label([for=fromX],'From X'),
input([name=fromX, type=textarea])
]),
p([], [
label([for=fromY],'From Y'),
input([name=fromY, type=textarea])
]),
p([], [
label([for=toX],'To X'),
input([name=toX, type=textarea])
]),
p([], [
label([for=toY],'To Y'),
input([name=toY, type=textarea])
]),
p([], input([name=submit, type=submit, value='Submit'], []))
])
]).
whiteTurn(X/Y, A/B, WHITE_N):-
WHITE = [ 2/1,4/1,6/1,8/1,
1/2,3/2,5/2,7/2,
2/3,4/3,6/3,8/3],
M = [ 1/1,2/1,3/1,4/1,5/1,6/1,7/1,8/1,
1/2,2/2,3/2,4/2,5/2,6/2,7/2,8/2,
1/3,2/3,3/3,4/3,5/3,6/3,7/3,8/3,
1/2,2/2,3/2,4/2,5/2,6/2,7/2,8/2,
1/4,2/4,3/4,4/4,5/4,6/4,7/4,8/4,
1/5,2/5,3/5,4/5,5/5,6/5,7/5,8/5,
1/6,2/6,3/6,4/6,5/6,6/6,7/6,8/6,
1/7,2/7,3/7,4/7,5/7,6/7,7/7,8/7,
1/8,2/8,3/8,4/8,5/8,6/8,7/8,8/8 ],
( member(X/Y, M), (X =:= A + 1; X =:= A - 1), Y =:= B - 1,
member(A/B, WHITE) ->
delete(WHITE, X/Y, WHITE_M), WHITE_N is [A/B|WHITE_M];
WHITE_N = WHITE).
game_page(White_N):-
reply_html_page(
title('Draughts'),
[
h1('Draughts'),
form([action='/game', method='POST'], [
p([], [
label([for=fromX],'From X'),
input([name=fromX, type=textarea])
]),
p([], [
label([for=fromY],'From Y'),
input([name=fromY, type=textarea])
]),
p([], [
label([for=toX],'To X'),
input([name=toX, type=textarea])
]),
p([], [
label([for=toY],'To Y'),
input([name=toY, type=textarea])
]),
p([], input([name=submit, type=submit, value='Submit'], []))
])
]).
は**私たちが試みることができるという例でる! – mat
これは何が起こっているかをより良く理解するのに役立ちます。http://www.swi-prolog.org/howto/http/Developing.html –
@mat私のコードの実行可能なエラーを同じエラーで追加しました –