簡體   English   中英

如何在 prolog 中查找列表?

[英]How to find a list in prolog?

之前我寫了謂詞 reach(Departure, Arrivals) 來找到我可以從出發點進入的所有點。 我如何找到出發點的名稱列表,從中我可以到達給定的到達點?

For example ?- list(krum, Departure).
Answer: Departure = [uzhorod].

這是我的代碼:

    reachable(D, D, _).
reachable(Departure, Arrival, Visited) :-
    trip(_, Departure, Point, _),
    \+ member(Point, Visited),
    reachable(Point, Arrival, [Point|Visited]).
reachable(Departure, Arrival) :-
    reachable(Departure, Arrival, [Departure]).

reach(Departure, Arrivals):-
    setof(
        Arrival,
        reachable(Departure, Arrival),
        Arrivals
    ),
    Arrivals \= [Departure].

這是我的事實:

trip(01, kuiv, odessa, 1500).
trip(02, kuiv, lviv, 700).
trip(08, lviv, zaporizhya, 700).
trip(03, uzhorod, krum, 6000).
trip(04, vunohradiv, odessa, 2540).
trip(05, ternopil, kuiv, 3800).
trip(06, zaporizhya, donetsk, 900).
trip(07, lytsk, mariupol, 7500).

trip(Id, Departure, Arrivals, Price)
 

這是我的 output:

For example ?- reach(kuiv, Arrivals).
Answer: Arrivals = [donetsk, kuiv, lviv, odessa, zaporizhya]

正如@TA_intern 指出的那樣,我們只需要翻轉reach即可:

inverse_reach(Arrival, Departures) :-
    setof(
        Departure,
        reachable(Departure, Arrival),
        Departures
    ).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM