Исправить ошибку The predicate 'main::posled/2 (i,o)', which is declared as 'procedure', is actually 'determ' - Prolog
Формулировка задачи:
Помогите пожалуйста исправить ошибку
Задание такое :
Реализовать набор предикатов для обработки списков:
· Добавление элемента X к списку List. Выдать новый список.
· Удаление элемента X из списка List. Выдать список без элемента Х.
· Конкатенация списков.
· Определение длины списка.
· Определение принадлежности элемента Х списку List.
Выбрать последний элемент списка L (posled)
Определить, что список М является началом списка L.(isBeginning )
Ошибка The predicate 'main:: posled/2 (i,o)', which is declared as 'procedure', is actually 'determ'
Заранее большое спасибо
Текст программы
Листинг программы
- implement main
- open core
- constants
- className = "main".
- classVersion = "".
- domains
- list = integer*.
- class predicates
- add : (list, integer, list) procedure(i,i,o).
- remove : (list, integer, list) procedure(i,i,o).
- concat : (list,list,list ) procedure(i,i,o ).
- length :(list,integer) procedure(i,o).
- posled:(list,integer) procedure(i,o) .
- contains :(list, integer) determ.
- isBeginning :(list,list ) determ.
- clauses
- classInfo(className, classVersion).
- add(L1, X, R):- R = [X|L1].
- remove([],_,[]):-!.
- remove([Head|Tail],X,R):-not(Head=X),remove(Tail,X,R1),R=[Head|R1],!.
- remove([_|Tail],_,R):-R=Tail.
- concat([H1|[]],L2,R):- R = [H1|L2],!.
- concat([H1|T1],L2,R):- concat(T1,L2,R1), R=[H1|R1],!.
- concat(_,_,[]):-! .
- length([],0):-!.
- length([Head|Tail],R):- length(Tail,R1),R=R1+1,!.
- posled([Head],Head):- !.
- posled([_|Tail], Head):- posled(Tail, Head),!.
- contains([],_):-fail().
- contains([Head|_],X):- Head=X, succeed(),!.
- contains([_|Tail],X):- contains(Tail,X).
- isBeginning([H1|T1],[H2|T2]):- H1=H2,isBeginning(T1,T2);fail(). % второй является началом первого списка
- isBeginning([H1|_],[]):- succeed().
- clauses
- run():-console::init(),
- stdio::write("%Добавление элемента в список\n Введите элемент, который нужно добавить в список [5,6,10,3,2,7]\n"),
- add([5,6,10,3,2,7],stdio::read(),R),stdio::write(R), stdio::nl(),
- stdio::write("% Удаление элемента из списка\n Введите элемент, который нужно удалить из списка [5,6,10,3,2,7]\n"),
- remove([5,6,10,3,2,7],stdio::read(),A),stdio::write(A), stdio::nl(),
- stdio::write("% Конкатенация списков [1,4] и [12,15,11]\n"),
- concat([1,4],[12,15,11],E),stdio::write(E), stdio::nl(),
- concat([1,4],[],F),stdio::write("Конкатенация списков [1,4] и [ ]\n",F), stdio::nl(),
- stdio::write("% Длина списка\n"),
- length([1,0,2,3,4,5,6],L),stdio::write("Длина списка [1,0,2,3,4,5,6] = ",L), stdio::nl(),
- length([],L2),stdio::write("Длина списка [ ] = ",L2), stdio::nl (),
- length([3,4,5,6],L1),stdio::write("длина списка [3,4,5,6] = ",L1), stdio::nl(),
- stdio::write("% Определение последнего элемента списка [5,6,10,3,2,7]\n "),
- posled([5,6,10,3,2,7], X),stdio::write("Последний элемент списка [5,6,10,3,2,7] = ",X), stdio::nl(),
- stdio::write("% Определение принадлежности элемента списку [5,6,10,3,2,7]\n Введите элемент для проверки \n"),
- (contains([5,6,10,3,2,7],stdio::read()),stdio::write("элемент содержится в списке\n"),!;stdio::write("элемент не содержится в списке\n"),
- succeed()),(
- stdio::write("% Определение является ли началом список [5,6] списка [5,6,10,3,2,7]\n"),
- isBeginning([5,6,10,3,2,7],[5,6]),stdio::write("является\n"),!;stdio::write("не является\n") , succeed()), succeed().
- end implement main
- goal
- mainExe::run(main::run).
Решение задачи: «Исправить ошибку The predicate 'main::posled/2 (i,o)', which is declared as 'procedure', is actually 'determ'»
textual
Листинг программы
- class predicates
- test: (...) determ
- clauses
- run() :-
- test(), !, console::write("Normal"); % - точка с запятой начинает новую ветку
- console::write("Fail").
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д