Tôi cần sửa đổi trình thông dịch meta vanilla để thực hiện tìm kiếm có độ sâu giới hạn. Tôi đang sử dụng đoạn mã sau để thử nghiệm sollution tôi:Tìm kiếm giới hạn độ sâu trong prolog (vanilla meta-interpreter)
value(wire1,1).
connected(wire2, wire1).
connected(wire3, wire2).
connected(wire4, wire3).
connected(wire5, wire4).
connected(wire6, wire5).
connected(wire7, wire6).
connected(wire8, wire7).
connected(wire9, wire8).
value(W,X):-connected(W,V), value(V,X).
Và mục tiêu là một cái gì đó như:
solve(value(w9,X), 3). /*depth =3, it should return false*/
solve(value(w9,X), 20). /*depth=20 is enought for returning X=1*/
Bằng cách này mã của tôi là
solve(true,_):-!.
solve((A,B),D) :-!, solve(A,D), solve(B,D).
solve(A,D) :- clause(A, B),solve(B,D2),D=D2+1,D>0).
Nhưng nó don 't làm việc tài sản. Bạn có thể giúp tôi được không? Cảm ơn rất nhiều trước
Bạn có thể sắp xếp lại các mục tiêu trong cơ thể như vậy mà sâu kiểm tra đến trước: 'giải quyết (A, D): - D> 1, khoản (A, B), D1 là D - 1, giải quyết (B, D1). ' – repeat