Created
September 8, 2011 21:13
-
-
Save disolovyov/1204745 to your computer and use it in GitHub Desktop.
Функционально-логическое программирование. Практика 1.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| hostname(X). % при каком X предикат hostname будет верным высказыванием | |
| system(cls). % предикат будет верным, если команда выполнилась | |
| % . — закончить ввод | |
| % ; — ещё варианты вывода («мне не годится») | |
| notepad. % ввести код через текстовой редактор | |
| % нельзя менять имя файла — пролог запутается | |
| % последний перевод строки обязателен | |
| % в блокноте: | |
| % comment | |
| it(works). | |
| it(works). % yes | |
| it(X). | |
| % программа на прологе — это, скорее, база данных, чем программа | |
| % консоль — это режим запроса, там нельзя так просто дополнять базу данных | |
| % соответственно, нельзя создать новый предикат | |
| X. % ошибка: X может быть чем угодно | |
| X=it(Y),X. % при каком X это выражение будет верным | |
| assert(it(is(good))). % it нужно объявить в базе как динамический предикат | |
| assert(y). % y автоматически становится динамическим | |
| y. | |
| % в блокноте: | |
| :-[mylib]. % подключить другой файл в этот файл | |
| % практически все слова — наши собственные | |
| % от пролога только скобки и точки | |
| % факты о родительстве | |
| parent(alexander,anatoly). | |
| parent(vera,anatoly). | |
| parent(alexander,mari). | |
| parent(vera,mari). | |
| parent(galina,alexander). | |
| % факты о поле | |
| man(anatoly). | |
| man(alexander). | |
| woman(mari). | |
| woman(vera). | |
| woman(galina). | |
| parent(man(X),anatoly). % не сопоставится ни с одним термом в базе | |
| parent(X,anatoly). | |
| parent(X,anatoly),(man(X);woman(X)). % несколько условий с «или» | |
| parent(X,anatoly),man(X);woman(X). % женщины найдутся отдельно | |
| woman(X),not(parent(X,anatoly)). | |
| parent(alexander,X). | |
| parent(alexander,_). % когда нас не интересует конкретный ответ; чёрная дыра | |
| % в блокноте (добавляя к предыдущему): | |
| human(X) :- man(X);woman(X). % X считается human, если ... | |
| parent(X) :- parent(X,_). | |
| not(parent(X)). % сломается, потому что not | |
| % не умеет ничего делать с открытыми термами | |
| % нужен основной (ground) терм | |
| human(X),not(parent(X)). | |
| findall(X,parent(X),L). % верно ли, что L является списком всех X, | |
| % для которых верно parent(X), в порядке нахождения | |
| findall((X,Y),(parent(X,Y),man(X)),L). | |
| setof(X,parent(X),L). % как и findall/3, но без повторений | |
| % на следующую практику/лабораторную сделать предикаты: | |
| % mother(X,Y) :- parent(X,Y),woman(X). | |
| % father(X,Y) :- X является отцом Y | |
| % | |
| % и по такому же приницпу: | |
| % father/2, grandmother/2, grandfather/2, | |
| % sister/2, brother/2, daughter/2, son/2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment