getlength(L,N) :-
retractall(getlength_res(_)),
assert(getlength_res(0)),
retractall(getlength_list(_)),
assert(getlength_list(L)),
(
getlength_list([]), !, getlength_res(N)
;
retract(getlength_res
(V
)), W
is V
+ 1, assert
(getlength_res
(W
)), retract(getlength_list
([_
|T
])), assert
(getlength_list
(T
)), fail ).
main:-
getlength([1,2,3,4,5,6], X),
writeln(X),
getlength([], Y),
writeln(Y)
.
:- main.
Z2V0bGVuZ3RoKEwsTikgOi0KICAgIHJldHJhY3RhbGwoZ2V0bGVuZ3RoX3JlcyhfKSksCiAgICBhc3NlcnQoZ2V0bGVuZ3RoX3JlcygwKSksCiAgICByZXRyYWN0YWxsKGdldGxlbmd0aF9saXN0KF8pKSwKICAgIGFzc2VydChnZXRsZW5ndGhfbGlzdChMKSksCiAgICByZXBlYXQsCiAgICAgICAgKAogICAgICAgICAgICBnZXRsZW5ndGhfbGlzdChbXSksICEsIGdldGxlbmd0aF9yZXMoTikKICAgICAgICA7CiAgICAgICAgICAgIHJldHJhY3QoZ2V0bGVuZ3RoX3JlcyhWKSksIFcgaXMgViArIDEsIGFzc2VydChnZXRsZW5ndGhfcmVzKFcpKSwKICAgICAgICAgICAgcmV0cmFjdChnZXRsZW5ndGhfbGlzdChbX3xUXSkpLCBhc3NlcnQoZ2V0bGVuZ3RoX2xpc3QoVCkpLCBmYWlsCiAgICAgICAgKS4KCm1haW46LQoJZ2V0bGVuZ3RoKFsxLDIsMyw0LDUsNl0sIFgpLAoJd3JpdGVsbihYKSwKCWdldGxlbmd0aChbXSwgWSksCgl3cml0ZWxuKFkpCgkuCgo6LSBtYWluLg==