請考慮以下Prolog代碼。它在其輸入中編輯特定類型的行,並打印出沒有任何改變的剩餘行。它使用一個名爲rule
的DCG,它不包含在下面,因爲它對這個問題並不重要。在SWI-prolog中調試 - 未綁定變量
go:-
prompt(_, ''),
processInput.
processInput:-
read_line_to_codes(current_input, Codes),
processInput(Codes).
processInput(Codes):-
(Codes \= end_of_file
->
(phrase(rule(Part1, Part2), Codes)
->
format('~s - ~s\n', [ Part1, Part2 ])
;
format('~s\n', [ Codes ])),
processInput
;
true).
:- go, halt.
這工作正常。但是,假設我將processInput/1
更改爲以下內容,它只是說Warning: /home/asfernan/tmp/tmp.pl:28: Goal (directive) failed: user: (go,halt)
。
processInput(Codes):-
(Codes \= end_of_file
->
(\+phrase(rule(Part1, Part2), Codes)
->
format('~s\n', [ Codes ]))
;
format('~s - ~s\n', [ Part1, Part2 ]),
processInput
;
true).
的,如果&的phrase(rule(Part1, Part2), Codes)
DCG比賽的其他部分進行了交流。這顯然是一個新手的錯誤,但go, halt
失敗的事實不是很有幫助。我能做些什麼來使錯誤信息表明失敗是因爲Part1
& Part2
未綁定在format('~s - ~s\n', [ Part1, Part2 ])
行?我能夠追蹤到這個錯誤,因爲代碼很小,但是如果代碼很大,我可能無法做到這一點。