Логическое программирование в ограничениях - Prolog

  1. Всем доброго времени суток! Прошу помощи) Люди добрые, кто понимает SWI Prolog, не могли бы вы прокомментировать код? Очень нужно разобраться. Я не во всех местах понимаю, что происходит И не подскажете как правильно написать запрос? что-то у меня не хочет работать Прога вот этой задачи: На одной улице стоят 4 дома. В каждом из них живет один из 4-х людей: Семен, Николай, Артур и Роман. Каждый из них владеет профессией: Врач, Художник, Егерь, Тренер. Определить кто в каком доме живет и кто какой профессией владеет. Известно, что: Художник живет рядом с тренером Врач живет рядом с Художником Егерь левее врача Тренер не рядом с Егерем Художник правее Семена Роман не тренер Семен рядом с Николаем Артур не рядом с Романом


textual

Код к задаче: «Логическое программирование в ограничениях - Prolog»

?- man_prof(MP).
MP = ['Роман'-'Егерь', 'Семен'-'Врач', 'Николай'-'Художник', 'Артур'-'Тренер'] ;
false.

СДЕЛАЙТЕ РЕПОСТ

5   голосов, оценка 4.000 из 5



Похожие ответы
  1. Прошу прощения за дилетантский вопрос, я не знаком с логическим программированием, только лишь присматриваюсь к нему, поэтому, то что я напишу тут, возможно является глупостью. Но, тем не менее. Вот, допустим, я задекларировал тип "Человек" от него унаследовал "Мужчина" и "Женщина", затем от "Женщина" унаследовал "Лена". Теперь я могу написать следующие декларации: Лена представитель типа человек? интерпретатор вычислит в истину, Лена представитель типа "Мужчина" -- вычислится в ложь, Лена имеет такое то свойство? --> true or false, Лена цвет волос --> темный, Лена количество рук --> 2... И так далее. Чем это все, собственно говоря, отличается от логического программирования, с концептуальной точки зрения?

  1. Привет всем. Нужна помощь со следующим заданием: Задание №1. Разработать рекурсивный вариант программы для решения предложенной ниже задачи. Задание №2. Разработать вариант программы с использованием средств управления в Прологе. Определять номер элемента списка из целых чисел, значение которого равно сумме первого и последнего элементов того же списка. Помогите пожалуйста

  1. У меня есть предикаты father(s,s), mother(s,s) и parent(s,s). (отец, мать и родитель) и я записал эти данные. Добавил новый предикат sister_brother(s,s) и не могу сформулировать условие. sister_brother(X,Y) если (father(Z,X) и father(Z,Y)) или (mother(Z,X) и mother(Z,Y)). Т е человек X будет являться сестрой,братом для Y, если у них один и тот же отец Z или одна и та же мать Z. Условие если пишется ":-". Логическое-И - ",". А логическое ИЛИ - ";". Но не пойму как сделать чтобы выполнялось как в условии учитывая скобки.

  1. вот задание. может подскажет кто запросы эти..решения.. DOMAINS mflist=mf* PREDICATES family (mf,mf,mflist) husband(mf) wife(mf) child(mf) belong(mf,mflist) exist(mf) date_birth(mf,dt) income(mf,integer) CLAUSES famile(mamber_family("Иван","Конюхов",date(7,"май",1950), work("инженер",1350)), member_family("Наталья","Конюхов",date(25,"ноябрь",1950), work("врач",800)), [member_family("Юрий","Конюхов",date(5,"июнь",1974), work("не работает",0)), member_family("Татьяна","Конюхов",date(15."май",1978), work("студентка",250))]). family(member_family("Ефим","Авенс",date(14,"сентябрь",1947), work("банкир",1300$)), member_family("Илона","Авенс",date(12,"август",1977) work("не работает",0)), [member_family("Лора","Авенс",date(2,"январь",1999), work("младенец",50))]). family(member_family("Сергей","Петров",date(4,"июнь",1967), work("слесарь",3500)), member_family("Людмила","Петров",date,(17,"октябрь",1968), work( [member_family("Илья","Петров",date(14,"июль",1989), work("учащийся",50)) member_family("Юлия","Петров",date(27,"апрель",1991), work("учащийся",50) member_family("Марина","Петров",date(20,"май",1995) work("младенец",50))]). 1)найти в базе данных фамилии женщин,имеющих по крайней мере хотя бы двух детей 2)есит ли в базе данных семьи,не имеющие детей 3)найти в базе данных людей старще 50 лет 4)найти в базе данных всех детей,разница в возрасте родителей которых составляет не менее 15 лет 5)найти в базе данных всех учащихся первая задачка. DOMAINS inv=inv(symbol,symbol) nand=nandl(symbol,symbol,symbol) and1=and2(nand,inv) PREDICATES reasistor(symbol,symbol,symbol) transistor(symbol,symbol,symbol,symbol) inverter(inv,symbol,symbol) nand_gate(nand,symbol,symbol,symbol) and_gate(and1,symbol,symbol,symbol) CLAUSAES resistor(r1,power,n4). resistor(r2,power,n5). transistor(t1,n1,n4,n3). transistor(t2,n2,ground,n3). transistor(t3,n4,ground,n5). inverter(inv(T,R),Input,Output):- transistor(T,Input,ground,Output), resistor(R,power,Output). nand_gate(nand1(T1,T2,R),Input,Input2,Output):- transistor(T1,Input1,X,Output), transistor(T2,Input2,ground,X), resistor(R,power,Output). and_gate(and2,(N,Y),Input,Input2,Output):- nand_gate(N,Input,Input2,X), inverter(Y,X,Output). GOAL and_gate(Q,Input,Input2,Output), write("Схема И- ",Q, "\в вход1-",Input1, "\в вход2-",Input2, "\в выход-",Output,nl, write("Die Arbeiten genug!\n DANKE SCHON!"). вторая задачка.задание на картинке внизу( со схемой)

  1. Можете пожалуйста помочь с Brainfuck задание y:=x^4+2X^3 я написал по примеру только что то неправильно делаю и невыводит что надо а выводи результат только по y:=x^2+2x можете пожалуйста помочь

  1. Была у нас такая лаба(точнее должна быть в декбре). Решил я поделится с вами кодом,мб кому-то пригодится.

  1. Здравствуйте. Всю жизнь работал и работаю в Си, а тут вот возникла такая ситуация что пришлось начать программировать в Turbo Prolog'e . И вот столкнулся с такой проблемой как "списки"... Есть 2 задачи которые я понимаю как решить, но от не знания языка ничего не выходит. Работу нужно сдать завтра, а у меня одна каша в голове. Вот эти задачи: 1) Добавить подсписок в указанную позицию 2) Удвоить значения положительных элементов списка и утроить значения его отрицательных элементов. Буду очень благодарен за полное решение двух данных задач.

  1. Не по теме: Уважаемы форумчане, выручите! Нужно решить задачу на прологе, но даже незнаю с чего начать( Надеюсь на вашу помощь! Заранее спасибо.... Имеется две кучки спичек. В первой 7 спичек, во второй - 5. За один ход разрешается взять любое количество спичек, но из одной кучки. Проигрывает тот, кому нечего брать. Кто выигрывает при правильной игре - начинающий или его партнер? И как для этого ему надо играть?

  1. Здравствуйте! помогите пж решить задачку на прологе, :gcray2; у нас препод на лекции не всегда приходит, зато требует все.Пж, помогите... База данных: человек (Кандид,20,Константинополь,нет). человек (Ник,25,Константинополь,очки). человек (Казимир,94,Ростов,нет). человек (Гонтран,2,Старая крепость,очки). и т.д. город ( ), возраст ( ), имя ( ). Сформулировать запросы: - носит ли Маслина очки? - в каком городе живет Мимоза? - перечислите города, в которых живут люди моложе 25 лет, носящие очки.