Я ожидал, что встроенная длина/2 предиката будет линейной по числу логических выводов. Однако представляется, что оно является постоянным:Число логических выводов длины/2 в Prolog (swi-pl)
?- 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)
Это потому, что процедура делегирована C? Я не смог найти соответствующий код в базе данных SWIPL.
В SICStus, есть 'Пролог: '$ list_info' (xs0, длина, Xs)' – false