Неправильное определение первого элемента списка - Prolog
Формулировка задачи:
Добрый день!
Есть задачка.Почти правильная!
Условие:
Реализовать процедуру для определения первого элемента списка (в учет принимаются списки всех уровней). Пример: в списке [[[s,a],b],c,[e,[f,[[g,e,p],v],y]],x] первый элемент s.Вот что я делаю:
вот что выводит,все хорошо:
Но есть проблема если исправить список значений на:
то выводит немного не правильно:
и так до бесконечности
Следующий шаг должен вывести "No".
Решение задачи: «Неправильное определение первого элемента списка»
textual
Листинг программы
first([],[]):-write("Null!").
first([H],H):-atom(H).
first([H|_],R):-first(H,R),atom(R),!.
first([H|_],R):-first([H|T],R).
first1([H|_], X) :-
nonvar(H),
H = [_|_],
first1(H, X).
first1([H|_], H) :-
nonvar(H),
not( H = [_|_] ).
first2([H|_], H) :-
var(H),
!.
first2([H|_], X) :-
H = [_|_],
first2(H, X).
first2([H|_], H) :-
not( H = [_|_] ).
?-first([s,a,b],R),write(R),nl.