Prolog 阿姆齐·普洛格赢得';调用时不传递值
我做一个简单的计算器程序有困难。由于某些原因,它在被调用时只传递变量的地址而不是值。如果有人能指出我的过失,我将不胜感激。Prolog 阿姆齐·普洛格赢得';调用时不传递值,prolog,amzi-prolog,Prolog,Amzi Prolog,我做一个简单的计算器程序有困难。由于某些原因,它在被调用时只传递变量的地址而不是值。如果有人能指出我的过失,我将不胜感激。 谢谢。Prolog中的变量不是全局变量。因此,您的集合中的第一个和第二个是局部范围的。因此集合op/1中的第一个和第二个变量与数字/0谓词中的变量不同 在声明式编程语言中,函数/谓词/…的结果通常只取决于传递的参数。虽然在Prolog中有一些表示“全局状态”的方法,如不可回溯的存储,但通常认为应用该原则更好,因此不实现某种全局状态 您需要传递变量,如: /* MAIN PR
谢谢。Prolog中的变量不是全局变量。因此,您的
集合中的第一个
和第二个
是局部范围的。因此集合op/1
中的第一个
和第二个
变量与数字/0
谓词中的变量不同
在声明式编程语言中,函数/谓词/…的结果通常只取决于传递的参数。虽然在Prolog中有一些表示“全局状态”的方法,如不可回溯的存储,但通常认为应用该原则更好,因此不实现某种全局状态
您需要传递变量,如:
/* 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).
编号:-
nl,nl,write('第一个数字:'),
读(第一),nl,
写入('第二个数字:'),
读(第二),nl,
操作(第一,第二)。
操作(第一,第二):-
nl,写('[1]-加法'),nl,
nl,写('[2]-减法'),nl,
nl,写('[3]-乘法'),nl,
nl,写('[4]-除法'),nl,
nl,写入('[5]-退出'),nl,
nl,写入(“:>”),
阅读(Op),nl,
写(第一),写(第二),
设置_op(op,First,Second)。
设置操作(1,第一,第二):-
总和是第一+第二,
写(求和)。
好吧,今天我学会了!我完全不知道他们是如何在全球和本地实施的。非常感谢你的朋友,我非常感激!
numbers :-
nl,nl,write('First number: '),
read(First),nl,
write('Second number: '),
read(Second),nl,
operation(First, Second).
operation(First, Second) :-
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, First, Second).
set_op(1, First, Second) :-
Sum is First + Second,
write(Sum).