gpt4 book ai didi

prolog - Prolog 中长度/2 的逻辑推理数(swi-pl)

转载 作者:行者123 更新时间:2023-12-01 12:28:24 26 4
gpt4 key购买 nike

我希望内置的 length/2 谓词在逻辑推理的数量上是线性的。然而,它似乎是不变的:

?- length(L,10),time(length(L,X)).
% 2 inferences, 0.000 CPU in 0.000 seconds (63% CPU, 142857 Lips)

?- length(L,20),time(length(L,X)).
% 2 inferences, 0.000 CPU in 0.000 seconds (62% CPU, 153846 Lips)

?- length(L,30),time(length(L,X)).
% 2 inferences, 0.000 CPU in 0.000 seconds (65% CPU, 111111 Lips)

这是因为程序委托(delegate)给了 C 吗?我在 SWIPL 代码库中找不到相关代码。

最佳答案

length/2 在 init.pl 的第 3230 行附近有一个浅而强大的接口(interface)。从那里它调用'$skip_list'(Length0, List, Tail) ,列表C界面的“瑞士刀”。

您可以在 src/pl-prims.c 的第 2377 行及以下内容中找到它:

/** '$skip_list'(-Length, +Xs0, -Xs) is det.

Xs0, Xs is a pair of list differences. Xs0 is the input list and Xs is
the minimal remaining list. Examination of Xs permits to classify the
list Xs0:

Xs | list type of Xs0 | Length
[] ... | well formed | length
Var ... | partial | elements skipped
[_|_] ... | infinite | upper bound for cycle
Term ... | malformed | elements skipped
*/
PRED_IMPL("$skip_list", 3, skip_list, 0)
...

关于prolog - Prolog 中长度/2 的逻辑推理数(swi-pl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37088981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com