0

我正在尝试编写一个程序来找出从起点到目的地的航班中有多少个停靠点。

flight(dgz, qyy).
flight(dgz, azi).
flight(qyy, csi).
flight(azi, tva).
flight(csi, ppg).
flight(tva, brw).
flight(brw, csi).


route(Orig, Dest, Stops) :- Stops is 0, flight(Orig, Dest).
route(Orig, Dest, Stops) :- Stops is Stops+1, flight(Orig, Layover), route(Layover, Dest).

我收到错误消息“参数没有充分实例化”。我不明白为什么。我在第一条规则中声明 Stops 为 0。你有什么见解吗?谢谢!

4

1 回答 1

0

我在第一条规则中声明 Stops 为 0。

一个人站在停车场寻找他们的车。它不在那里。“我不明白为什么”,他们说,“我早些时候把它停在了另一个停车场”。

在 C 中,x = x + 1是赋值。在 Prolog 中,这是一个不正确的陈述,0不是0 + 1

route(Orig, Dest, Stops) :- 
    Stops is 0,
    flight(Orig, Dest).

route(Orig, Dest, Stops) :- 
    Stops is Stops+1,
    flight(Orig, Layover),
    route(Layover, Dest).  % <-- what's missing here?
                           %     there is no route() with
                           %     only two parameters.

route 缺少的参数是您将从第一个规则中获得 Stops 为 0 的地方,在这里您将获得 0 的值,将其加 1 以获得该规则的 Stops(而不是把它们都称为相同的东西)

于 2022-01-23T00:28:45.910 回答