Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 阿姆齐·普洛格赢得';调用时不传递值_Prolog_Amzi Prolog - Fatal编程技术网

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).