Czy zmienna zawiera listę?

0

Witam,
w jaki sposób mogę sprawdzić w predykacie, czy pod daną zmienną znajduje się lista, a nie liczba?
Macie jakieś pomysły?
Pozdrawiam

1
14 ?- is_l([5]).
true.

15 ?- is_l([]).
true.

16 ?- is_l(3).
false.

17 ?- compound([5]).
true.

18 ?- compound([]).
false.

19 ?- compound(2).
false.

20 ?- is_list([5]).
true.

21 ?- is_list([]).
true.

22 ?- is_list(2).
false.

compound i is_list to fx z biblioteki standardowej.

is_l to banalny predykat, równoważny is_list:

is_l([_|_]) :- !.
is_l([]) :- !.
% compound/1 zachowuje się inaczej ([] nie jest listą).
% jeśli chcesz takiego zachowania, wyrzuć powyższą linijkę.
is_l(_) :- !, fail.

Różnią się traktowaniem pustej listy: compound([]) == fail, is_l([]) == is_list([]) == true.

Edit: jest jednak drobna różnica między is_l i is_list - cytując dokumentację is_list, The implementation fails safely if Term represents a cyclic list.

1 użytkowników online, w tym zalogowanych: 0, gości: 1