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.