Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Prolog > Помогите пожалуйста найти ошибку)(Prolog)


Автор: Евгений228 17.09.17, 18:17
Нужно что бы пролог вывел просто все названия металов,
в столбик, но выбивает ошибку что не использованые предложения!

-----------------------------------------------
domains
S=String
M=Symbol
predicates
nondeterm Metal(M,S)
nondeterm UnMetal(M,S)
nondeterm Nabor(M,M)


clauses
Metal(M,Hidrargirum).
Metal(M,Ferum).
Metal(M,Aluminium).
Metal(M,Titan).
Metal(M,Cuprum).
Metal(M,Uranium).
Metal(M,Franziy).
Metal(M,Zinck).
Metal(M,Kaliy).
Metal(M,Rubidiy).
Metal(M,Aurum).
Metal(M,Argentum).
Metal(M,Magniy).
Metal(M,Calciy).
Metal(M,Cesium).
Metal(M,Radon).
Metal(M,Wolfram).
Metal(M,Nicel).

UnMetal(U,Silicium).
UnMetal(U,Oxygen).
UnMetal(U,Hydrogen).
UnMetal(U,Phosphorus).
UnMetal(U,Sulfur).
UnMetal(U,Borum).
UnMetal(U,Carbon).
UnMetal(U,Chlor).
UnMetal(U,Selen).
UnMetal(U,Arsen).
UnMetal(U,Bromium).
UnMetal(U,Iodum).
UnMetal(U,Argentum).
UnMetal(U,Helium).
UnMetal(U,Ftor).
UnMetal(U,Krypton).
UnMetal(U,Xenon).
UnMetal(U,Radon).
UnMetal(U,Neon).

Nabor(X,Y):-
Metal(M,X),UnMetal(U,Y),nl,fail.

Goal
Nabor(X,Y).
/*write("Metals are: ",Metal,"Un Metals are",UnMetal).*/

Автор: Славян 17.09.17, 19:03
А когда это радон стал металлом? :blink:

Автор: Евгений228 17.09.17, 19:24
Цитата Славян @
А когда это радон стал металлом? :blink:

Если что UnMetal это Не металы

Автор: Славян 18.09.17, 01:29
А!, пардон. Я увидел вначале, что он объявлен металлом, а более позднее переобъявление не углядел. :oops:

Автор: amk 20.09.17, 12:17
А в прологе строки разве в кавычки не берутся?

Автор: Vesper 24.12.17, 15:54
Не понял две вещи. Во-первых, почему у Metal и UnMetal первая переменная не связывается вообще. Не проще ли было писать "Metal(Hydrargyrum)." и всё? Тогда вывести все металлы можно было бы запросом Metal(X), без всяких извращений. И во-вторых, что должен возвращать предикат Nabor? У него ни одной истины в описании.

Автор: swf 26.04.20, 21:49
В прологе с заглавной буквы пишутся только свободные переменные.
Если очень хочется написать с заглавной, то строка берётся в двойные кавычки, символ - в апострофы.

Я убрала заглавные. Константы в прологе начинаются со строчной буквы.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    domains
    s=string
    m=symbol
     
    predicates
    nondeterm Metal(m,s)
    nondeterm UnMetal(m,s)
     
     
     
    clauses
    Metal(m,hidrargirum).
    Metal(m,ferum).
    Metal(m,aluminium).
    Metal(m,titan).
    Metal(m,cuprum).
    Metal(m,uranium).
    Metal(m,franziy).
    Metal(m,zinck).
    Metal(m,kaliy).
    Metal(m,rubidiy).
    Metal(m,aurum).
    Metal(m,argentum).
    Metal(m,magniy).
    Metal(m,calciy).
    Metal(m,cesium).
    Metal(m,radon).
    Metal(m,wolfram).
    Metal(m,nicel).
     
    UnMetal(u,silicium).
    UnMetal(u,oxygen).
    UnMetal(u,hydrogen).
    UnMetal(u,phosphorus).
    UnMetal(u,sulfur).
    UnMetal(u,borum).
    UnMetal(u,carbon).
    UnMetal(u,chlor).
    UnMetal(u,selen).
    UnMetal(u,arsen).
    UnMetal(u,bromium).
    UnMetal(u,iodum).
    UnMetal(u,argentum).
    UnMetal(u,helium).
    UnMetal(u,ftor).
    UnMetal(u,krypton).
    UnMetal(u,xenon).
    UnMetal(u,radon).
    UnMetal(u,neon).
     
    Goal
    write("Metals are"), nl, Metal(_,X),write(X),nl, readchar(_),fail.


Добавлено
Если нужно напечатать и металлы, и неметаллы, то ставим такую цель
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Goal
    write("Metals are"), nl, Metal(_,X),write(X),nl, readchar(_),fail;
    nl,write("Unmetals are"),nl,UnMetal(_,X),write(X),nl, readchar(_),fail.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)