Turbo Prolog 执行顺序

Turbo Prolog execution order

我正在努力理解为什么我会得到这样的结果。假设这是代码和结果:

抱歉,如果这是微不足道的,但网上没有太多关于此的资源...如果 d(3) 的输出对我有意义,那么 e(3) 根本就没有意义。 为什么在这种情况下移动写入会颠倒顺序?
我猜它与递归有关,但我仍然不知道为什么。

这是因为第一种情况:你先写然后递归调用d(N1),所以比如d(3)write 3然后call d(2)等等。 .

在第二种情况下:您首先调用 e(N1) 然后写入,这会改变顺序,因为例如 e(1) 将调用 e(0),然后调用 e(-1)将成功,然后 e(0)write 0 然后 e(1)write 1 等等...