На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Помогите пожалуйста найти ошибку)(Prolog) , Пролог,нужна помощь
    Нужно что бы пролог вывел просто все названия металов,
    в столбик, но выбивает ошибку что не использованые предложения!

    -----------------------------------------------
    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).*/
    Сообщение отредактировано: Евгений228 -
      А когда это радон стал металлом? :blink:
        Цитата Славян @
        А когда это радон стал металлом? :blink:

        Если что UnMetal это Не металы
          А!, пардон. Я увидел вначале, что он объявлен металлом, а более позднее переобъявление не углядел. :oops:
            А в прологе строки разве в кавычки не берутся?
              Не понял две вещи. Во-первых, почему у Metal и UnMetal первая переменная не связывается вообще. Не проще ли было писать "Metal(Hydrargyrum)." и всё? Тогда вывести все металлы можно было бы запросом Metal(X), без всяких извращений. И во-вторых, что должен возвращать предикат Nabor? У него ни одной истины в описании.
                В прологе с заглавной буквы пишутся только свободные переменные.
                Если очень хочется написать с заглавной, то строка берётся в двойные кавычки, символ - в апострофы.

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

                ExpandedWrap disabled
                  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.


                Добавлено
                Если нужно напечатать и металлы, и неметаллы, то ставим такую цель
                ExpandedWrap disabled
                  Goal
                  write("Metals are"), nl, Metal(_,X),write(X),nl, readchar(_),fail;
                  nl,write("Unmetals are"),nl,UnMetal(_,X),write(X),nl, readchar(_),fail.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0316 ]   [ 15 queries used ]   [ Generated: 30.05.24, 19:15 GMT ]