B-Prolog具有邏輯循環。例如,這就是我們可以計算出[1,2,3]總和:B-Prolog中帶有累加器的嵌套環
test1 :-
foreach(A in 1..3, [], ac(Sa, 0), (
Sa^1 is Sa^0 + A
)),
writeln(sa(Sa)).
?- test1.
test1.
sa(6)
yes
但是,當我嘗試用蓄電池兩個嵌套的循環,我得到的錯誤:
test2 :-
foreach(_A in 1..3, [Sb], ac(Sa, 0), (
foreach(B in 1..3, [], ac(Sb, 0), (
Sb^1 is Sb^0 + B
)),
writeln(sb(Sb)),
Sa^1 is Sa^0 + Sb
)),
writeln(sa(Sa)).
?- test2.
test2.
*** error(invalid_argument,(+)/2)
另一種變形,不包括銻在外環的局部變量列表:
test3 :-
foreach(_A in 1..3, [], ac(Sa, 0), (
foreach(B in 1..3, [], ac(Sb, 0), (
Sb^1 is Sb^0 + B
)),
writeln(sb(Sb)),
Sa^1 is Sa^0 + Sb
)),
writeln(sa(Sa)).
?- test3.
test3.
sb(6)
*** error(invalid_argument,(+)/2)
它甚至有可能擁有與B-Prolog的蓄能器嵌套循環?
我的B-Prolog版本是8.0#1。
在你的真實代碼中,內循環的目標是依賴於外循環的變量還是累加器?在這裏顯示的代碼中,'Sb'是不變的,可以預先計算。我想你的真實代碼並非如此? –
是的,我只是提供了非常簡單的廢話代碼來顯示帶累加器的嵌套循環的問題。 –
是的,我很懷疑。 :) –