Belirli bir düğümden tüm düğümler nasıl yazdırılır

0

Soru

Aşağıdaki bilgi tabanına sahibim:

connects(1,11,10,8).
connects(1,12,2,6).
connects(1,13,-3,-2).
connects(1,14,1,-5).

Bu yüklemlerim var:

friends(Node, L):-
findall(X,(connects(Node,X,_,_);connects(X,Node,_,_)),L).

soruyu sorduğumda mı ?- arkadaşlar (1,L) bende bu var:

L = [11, 12, 13, 14].

Ama amacım böyle bir liste yazdırmak:

L = [11,10,8,12,2,6,13,-3,-2,14,-5]

Bunu nasıl elde edebilirim?

prolog
2021-11-22 21:14:05
2

En iyi cevabı

1

Yüklemin gerçekte hangi ilişkiyi temsil ettiği bana açık değil. Her neyse, aşağıdaki gibi devam edebilirsiniz:

  • İlk olarak, ihtiyacınız olan verileri liste listesi olarak toplamak için findall'ı kullanın:
?- findall([X,Y,Z], connects(1,X,Y,Z), L).
L = [[11, 10, 8], [12, 2, 6], [13, -3, -2], [14, 1, -5]].
  • Bundan sonra, düzleştirilmiş bir liste almak için append'i kullanabilirsiniz:
?- findall([X,Y,Z], connects(1,X,Y,Z), L0), append(L0, L1).
L0 = [[11, 10, 8], [12, 2, 6], [13, -3, -2], [14, 1, -5]],
L1 = [11, 10, 8, 12, 2, 6, 13, -3, -2, 14, 1, -5].

Koyarak hepsini birlikte, bir define arkadaş/2 olarak:

friends(Node, L1):-
   findall([X,Y,Z],
           ( connects(Node, X,Y,Z)
           ; connects(X, Node, Y,Z) ), L0),
   append(L0, L1).
2021-11-23 00:40:16
1

Yüklemi değiştirebileceğinizi varsayarsak. Değiştirilmesi _değişkenli s size ihtiyacınız olan değerleri verecektir. Ve sonra kullan flatten/2 matrisi (2D listesi) basit bir 1D listesine dönüştürmek için.

Bu sorunu çözmek gerekir.

friends(Node, L):-
    findall([X, Y, Z], (connects(Node, X, Y, Z)), A),
    flatten(A, L).

Örnek çıktı:

?- friends(1, L)
L = [11, 10, 8, 12, 2, 6, 13, -3, -2, 14, 1, -5]
2021-11-23 00:37:53

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................