无法在prolog中设置输入和输出

无法在prolog中设置输入和输出,prolog,Prolog,我正在做一个prolog练习,这是从 我现在要做的是更改程序的输入和输出方式。 我需要通过在控制台中键入以下命令来执行程序: goldbach(100, L). 举个例子,当屏幕上打印上一个结果时,我需要按[;]来显示下一个结果 L = [3, 97]; L = [11, 89]; L = .... 不过,我想说的是: Input a number:100. L = [3, 97]. L = [11, 89]. ..... 也就是说,程序将首先打印“输入一个数字:”并读取您的输入,然后自动

我正在做一个prolog练习,这是从

我现在要做的是更改程序的输入和输出方式。
我需要通过在控制台中键入以下命令来执行程序:

goldbach(100, L).
举个例子,当屏幕上打印上一个结果时,我需要按[;]来显示下一个结果

L = [3, 97];
L = [11, 89];
L = ....
不过,我想说的是:

Input a number:100.
L = [3, 97].
L = [11, 89].
.....
也就是说,程序将首先打印“输入一个数字:”并读取您的输入,然后自动打印出所有可能的结果

我已经阅读了关于read()和write的部分,但是当我添加这些内容时,我失败了:

read_gold :-
  write('Input a number:'),
  read(X),
  write(goldbach(X, L)).

如何修复代码,使程序实现所需的输入和输出?感谢您的回答。

像这样的东西确实可以满足您的要求,尽管人们通常不会使用Prolog查询和解决方案

read_gold :-
  write('Input a number:'),
  read(X),
  show_results(goldbach(X)).

show_results(Query) :-
  call(Query, L),
  write('L = '), write(L), write('.'), nl,
  fail.
show_results(_).
一次性收集所有解决方案的一种更干净的方法是使用
findall/3
列出它们:

read_gold(Solutions) :-
  write('Input a number:'),
  read(X),
  findall(L, goldbach(X, L), Solutions).
或者,在没有明确提示的情况下:

read_gold(X, Solutions) :-
  findall(L, goldbach(X, L), Solutions).
并将其查询为,例如:

?- read_gold(100, Solutions).
Solutions = [[3, 97], [11,89], ...]

像这样的东西确实可以满足您的要求,尽管人们通常不会使用Prolog查询和解决方案

read_gold :-
  write('Input a number:'),
  read(X),
  show_results(goldbach(X)).

show_results(Query) :-
  call(Query, L),
  write('L = '), write(L), write('.'), nl,
  fail.
show_results(_).
一次性收集所有解决方案的一种更干净的方法是使用
findall/3
列出它们:

read_gold(Solutions) :-
  write('Input a number:'),
  read(X),
  findall(L, goldbach(X, L), Solutions).
或者,在没有明确提示的情况下:

read_gold(X, Solutions) :-
  findall(L, goldbach(X, L), Solutions).
并将其查询为,例如:

?- read_gold(100, Solutions).
Solutions = [[3, 97], [11,89], ...]

您希望修改或重新实现顶层。当然,对于初学者来说太复杂了。你不能
编写(goldbach(X,L))
来获得查询
goldbach(X,L)
的结果。谓词不会以函数返回值的形式返回解决方案。您希望修改或重新实现顶层。当然,对于初学者来说太复杂了。你不能
编写(goldbach(X,L))
来获得查询
goldbach(X,L)
的结果。谓词不会以函数返回值的形式返回解决方案。使用
write/1
来编写术语是很有问题的。而是使用
writeq/1
谢谢您的回答。现在我知道我应该阅读关于查询的内容。解决大多数问题是一件很好而且很重要的事情。使用
write/1
来编写术语是很有问题的。而是使用
writeq/1
谢谢您的回答。现在我知道我应该阅读关于查询的内容。解决大多数问题是一件好事,也是一件重要的事情。