我想翻譯一個簡單的Turbo Prolog的問題到Visual Prolog的7.1視覺Prolog的錯誤C502:表達式不會產生一個值
原來的Turbo Prolog的代碼如下。
DOMAINS
s=string sl=s* sll=sl*
PREDICATES
select(sl,s,sl)
solve(sll)
CLAUSES
select([A|B],A,B).
select([A|B],C,[A|D]):- select(B,C,D).
solve([["Anna",A,A],["Kate",Vp,Vt], ["Natasha",Np,"green"]]):-
select(["white","green","blue"],A,ColPl),
select(["white","blue"],A,[Vt]), Vt<>"white",
select(ColPl,Vp,[Np]), Vp<>"white", Np<>"green".
及其導致的列表與solve(Out)
與輸出提供了一個正確的結果,以渦輪Prolog的控制檯。
當嘗試這種轉換爲Visual Prolog中,我得到錯誤C502在33行
implement main
open core
constants
className = "main".
classVersion = "".
domains
s=string.
sl=s*.
sll=sl*.
%
class predicates
select:(sl,s,sl) nondeterm anyflow.
solve:(sll) nondeterm anyflow.
%
clauses
%
select([A|B],A,B).
select([A|B],C,[A|D]):- select(B,C,D).
%
solve([["Anna",A,A],["Kate",Vp,Vt],["Natasha",Np,"green"]]):-
select(["white","green","blue"],A,ColPl),
select(["white","blue"],A,[Vt]), Vt<>"white",
select(ColPl,Vp,[Np]), Vp<>"white", Np<>"green".
clauses
classInfo(className, classVersion).
clauses
run():-
console::init(),
%ERROR AFTER THIS LINE
stdIO::writef("%", solve(Out)),fail().
end implement main
goal
mainExe::run(main::run).
我從這個錯誤中得到的是solve(Out)
不給任何要打印。我不知道的是如何更改代碼以生成要打印的內容。
我是Prolog的初學者,我無法弄清楚如何解決這個問題,Google也沒什麼幫助,這似乎是一個很晦澀的問題。
謝謝!
感謝您對我的謂詞理解的快速回答和更正! 不幸的是,這個改變會產生另一個錯誤: 錯誤c631:聲明爲'procedure'的謂詞'main :: run/0'實際上是'failure' – Lowry
可能是因爲你的fail() 'main'的定義。 –
通過此更改,'失敗'現在替換爲'nondeterm' – Lowry