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