Amzi Prolog 调用时不会传值
Amzi Prolog won't pass value when being called
/* MAIN PROGRAM */
main:- welcome.
welcome:-
write('************************************************'),nl,
write('* Welcome to my Simple Calculator *'),nl,
write('************************************************'),nl,nl,
write('For every input you enter, please followed by a full stop[.]'),
numbers.
numbers:-
nl,nl,write('First number: '),
read(FIRST),nl,
write('Second number: '),
read(SECOND),nl,
operation.
operation:-
nl,write('[1]- Addition.'), nl,
nl,write('[2]- Subtraction.'),nl,
nl,write('[3]- Multiplication.'),nl,
nl,write('[4]- Division.'),nl,
nl,write('[5]- Exit.'),nl,
nl,write(':>'),
read(ANS1),nl,
set_op(ANS1).
set_op(1):-
write(FIRST),write(SECOND),
SUM is FIRST + SECOND,
write(SUM).
我在执行一个简单的计算器程序时遇到问题。由于某些原因,它在被调用时只会传递变量的地址而不是值。如果有人能指出我的失误,我将不胜感激。
谢谢。
Prolog 中的变量不是全局的。因此,set_op
中的 FIRST
和 SECOND
是 局部范围的 。因此,set_op/1
中的 FIRST
和 SECOND
与 numbers/0
谓词中的变量不同。
在声明式编程语言中,通常 function/predicate/... 的结果仅取决于传递的参数。尽管在 Prolog 中有一些方法可以将 "global state" 表示为不可回溯的存储,但通常认为应用该原则更好,因此不实现某种全局状态。
您需要传递变量,例如:
numbers :-
nl,nl,write('First number: '),
read(<b>First</b>),nl,
write('Second number: '),
read(<b>Second</b>),nl,
operation(<b>First, Second</b>).
operation(<b>First, Second</b>) :-
nl,write('[1]- Addition.'), nl,
nl,write('[2]- Subtraction.'),nl,
nl,write('[3]- Multiplication.'),nl,
nl,write('[4]- Division.'),nl,
nl,write('[5]- Exit.'),nl,
nl,write(':>'),
read(Op),nl,
write(First), write(Second),
set_op(Op, <b>First, Second</b>).
set_op(1<b>, First, Second</b>) :-
Sum is First + Second,
write(Sum).
/* MAIN PROGRAM */
main:- welcome.
welcome:-
write('************************************************'),nl,
write('* Welcome to my Simple Calculator *'),nl,
write('************************************************'),nl,nl,
write('For every input you enter, please followed by a full stop[.]'),
numbers.
numbers:-
nl,nl,write('First number: '),
read(FIRST),nl,
write('Second number: '),
read(SECOND),nl,
operation.
operation:-
nl,write('[1]- Addition.'), nl,
nl,write('[2]- Subtraction.'),nl,
nl,write('[3]- Multiplication.'),nl,
nl,write('[4]- Division.'),nl,
nl,write('[5]- Exit.'),nl,
nl,write(':>'),
read(ANS1),nl,
set_op(ANS1).
set_op(1):-
write(FIRST),write(SECOND),
SUM is FIRST + SECOND,
write(SUM).
我在执行一个简单的计算器程序时遇到问题。由于某些原因,它在被调用时只会传递变量的地址而不是值。如果有人能指出我的失误,我将不胜感激。 谢谢。
Prolog 中的变量不是全局的。因此,set_op
中的 FIRST
和 SECOND
是 局部范围的 。因此,set_op/1
中的 FIRST
和 SECOND
与 numbers/0
谓词中的变量不同。
在声明式编程语言中,通常 function/predicate/... 的结果仅取决于传递的参数。尽管在 Prolog 中有一些方法可以将 "global state" 表示为不可回溯的存储,但通常认为应用该原则更好,因此不实现某种全局状态。
您需要传递变量,例如:
numbers :-
nl,nl,write('First number: '),
read(<b>First</b>),nl,
write('Second number: '),
read(<b>Second</b>),nl,
operation(<b>First, Second</b>).
operation(<b>First, Second</b>) :-
nl,write('[1]- Addition.'), nl,
nl,write('[2]- Subtraction.'),nl,
nl,write('[3]- Multiplication.'),nl,
nl,write('[4]- Division.'),nl,
nl,write('[5]- Exit.'),nl,
nl,write(':>'),
read(Op),nl,
write(First), write(Second),
set_op(Op, <b>First, Second</b>).
set_op(1<b>, First, Second</b>) :-
Sum is First + Second,
write(Sum).