Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 序言:从列表中切片,为什么它失败得这么快?_Prolog - Fatal编程技术网

Prolog 序言:从列表中切片,为什么它失败得这么快?

Prolog 序言:从列表中切片,为什么它失败得这么快?,prolog,Prolog,任何建议?长度(acc,X)将始终失败。X=K-1和X是一个整数,acc一般来说是一个常数,你可能是说它是acc是的,关于acc我改变了它。为什么长度(acc,X)和X=K-1总是失败?一旦length(acc,X)成功,X将是一个整数,它与结构(-)/2不同。在Prolog中,=表示语法上相等,而不是算术上相等。 iterate([],acc,K,L,ac):- length(acc,K),length(ac,K-L+1). iterate([H|M], acc, K, L,[]):- l

任何建议?

长度(acc,X)
将始终失败。
X=K-1
X
是一个整数,
acc
一般来说是一个常数,你可能是说它是
acc
是的,关于acc我改变了它。为什么长度(acc,X)和
X=K-1
总是失败?一旦
length(acc,X)
成功,
X
将是一个整数,它与结构
(-)/2
不同。在Prolog中,
=
表示语法上相等,而不是算术上相等。
iterate([],acc,K,L,ac):- length(acc,K),length(ac,K-L+1).

iterate([H|M], acc, K, L,[]):-  length(acc, X), X<K-1,  append( acc,  [H], New),
iterate(M, New, K, L, []).

iterate([H|M], acc, K, L,[]):-  length(acc, X), X=K-1,  append( acc,  [H], New), append([],[H],ac),
iterate(M, New, K, L, ac).

iterate([H|M], acc, K, L, ac):- length(acc, K), length(ac, X), X<K-L +1,
append(ac, [H], SLICE), iterate(M, acc, K, L, SLICE).

iterate([_|_], acc, K, L, SLICE) :- length(acc, K), length(SLICE, K-L+1).
   Call: (10) iterate([1, 2, 3, 4], [], 2, 4, _8428) ? creep
   Fail: (10) iterate([1, 2, 3, 4], [], 2, 4, _8428) ? creep
false.