Переменная пролога не существует
Вот моя простая программа для проверки, если еще и вызов функции в swi пролог. Что не так с кодом ниже, который говорит rule
не существует
call_rule(Roll):-
(
member(Roll,[123]),
writeln('inside call rule'),
nb_getval(rule, 'this is the rule')
).
print_roll(Roll) :-
( Roll < 2 ->
writeln('not a roll')
;
( Roll > 1243 ->
writeln('not a roll'),writeln('this is 2nd alternative'),writeln('this is third alternative')
;
( Roll =:= 12 ->
writeln('boxcars')
;
( call_rule(Roll) ->
nb_getval(rule, RULE),
writeln('snake eyes')
;
nb_getval(rule,SUBJECT),
writeln(SUBJECT)
)
)
)
).
результат:
3 ?- print_roll(123).
inside call rule
ERROR: nb_getval/2: variable `rule' does not exist
1 ответ
Решение
Прежде чем вы сможете получить значение из магазина без возможности возврата назад, вам необходимо nb_setval
ключ:
Пример:
?- nb_getval(a,X).
ERROR: nb_getval/2: variable `a' does not exist
?- nb_setval(a,foo).
true.
?- nb_getval(a,X).
X = foo.