Переменные и как они установлены и используются в прологе - PullRequest
1 голос
/ 27 января 2012

http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_1.html

Так что в том уроке, где он имеет:

conflict(Coloring) :- 
   adjacent(X,Y), 
   color(X,Color,Coloring), 
   color(Y,Color,Coloring). 

Правильно ли я понимаю, что Color является переменной и ему присваивается значение после первого вызова color, а затем это значение используется во втором вызове color?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Переменные в прологе:

  1. Все переменные и аргументы являются локальными по объему для предиката, в котором они объявлены (он же впервые используется). Разумеется, за исключением того, что переменные могут передаваться в качестве аргументов (по существу, «по ссылке») другому предикату.

  2. Переменные пролога являются только «переменными», пока не будут связаны (объединены) с чем-то другим. В этот момент они перестают быть переменными и становятся едиными с тем, с чем они были объединены. Отсюда и использование термина «объединение»: объединяться - значит стать единым целым.

  3. Откат, конечно, отменяет любое объединение, которое могло произойти, возвращая вещи к status quo ante как бы.

  4. Специальная переменная _ является «анонимной переменной». Каждое использование, даже в пределах одного и того же предложения предиката, является независимым. Например, учитывая факты

    letter(a).
    letter(b).
    letter(c).
    
    digit(1).
    digit(2).
    digit(3).
    

предикат:

foo :- letter(A),number(A).

терпит неудачу, в то время как

foo :- letter(_),number(_).

удастся (9 раз, с возвратом).

1 голос
/ 27 января 2012

Color - это переменная, но мы не можем сказать, получит ли она значение (в Прологе это называется binding ) от первого или второго вызова color / 3. Все зависит от цвета / 3 определения. Но, учитывая этот код, вполне вероятно, что ваше предположение в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...