Mantık programlamada yeniyim. Belirli bir düğüme ulaşabilecek tüm düğümleri bulabilen bir program yazmaya çalışıyorum.
İşte benim kodum:
link(0, 1).
link(3, 4).
link(1, 2).
link(2, 0).
link(2, 1).
link(3, 2).
link(4, 3).
Yani yukarıda grafikle göster, aşağıdaki gibi görünmelidir:
Böyle bir şey yapmak istiyorum :
?- go(X,0).
X=1;
X=2;
X=3;
X=4;
....
Bu, tüm 1,2,3 ve 4'ten 0'a gidebileceği anlamına gelir.
[1->2->0],[2->0],[3->2->0],[4->3->2->0]...
bu yüzden deniyorum
go(X,Y) :- link(X,Y).
go(X,Y) :- link(X,Z),go(Z,Y).
?- go(X,0).
X=2;
X=0;
X=0;
X=0;
X=0;
....
ancak çıktılardan biri olarak 0 istemiyorum, zaten 0'dayken 0'a gidebileceğimi göstermek anlamsızdır. Ayrıca, tekrarlamaya devam ediyor. Bu sorunu şu şekilde düzeltmeye çalışıyorum:
go(X,Y) :- link(X,Y).
go(X,Y) :- (X\==Y),link(X,Z),go(Z,Y).
?- go(X,0).
X = 2 ;
false.
Neden X=2'de duracağından emin değilim. ProLog arama ağacını çizmeye çalışıyorum ve kodumun neden diğer gerçekleri aramaya devam etmediğini hala bilmiyorum (link (3,4)). Bir noktada durmuş gibi görünüyor ve aşağıdaki yeşil kısım için devam etmiyor:
Go(1,0) kullanarak test etmeye çalışıyorum. gitmek için (4,0). git(1,0) ve git (2,0) başarı Ancak git (3,0) ve git(4,0) dönüş Hatası: Yığın sınırı. Özyinelemenin düğüm 3 ile 4 arasında gidip gelmeye devam ettiğini buldum. Ama nasıl çözeceğimi gerçekten bilmiyorum.
Şimdi kafam çok karıştı, lütfen bana hatamın ne olduğunu veya bu işlevi doğru bir şekilde nasıl uygulayacağımı söyle? Teşekkür ederim.