Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 |
А когда это радон стал металлом? |
Автор: Евгений228 17.09.17, 19:24 |
Если что UnMetal это Не металы |
Автор: Славян 18.09.17, 01:29 |
А!, пардон. Я увидел вначале, что он объявлен металлом, а более позднее переобъявление не углядел. |
Автор: 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. |