Input 用于任意数据的Prolog代码(因此它不必硬编码)

Input 用于任意数据的Prolog代码(因此它不必硬编码),input,prolog,Input,Prolog,目前,我正在编写一个Prolog程序,处理从一个位置到另一个位置的各种不同方式,并计算这些路径的距离 到目前为止,我一直在将我的数据子句硬编码到代码中,作为一种快速的测试方法,但我需要以这样一种方式编写代码,即可以将具有适当格式数据的数据文件读入程序 比如说, path(1, 4). setRoutes([[1, 2, 45], [1, 3, 135], [2, 4,135], [3, 4, 45]] ). 将是输入数据的格式,因此我已将其硬编码到我的程序中。以下内容不是

目前,我正在编写一个Prolog程序,处理从一个位置到另一个位置的各种不同方式,并计算这些路径的距离

到目前为止,我一直在将我的数据子句硬编码到代码中,作为一种快速的测试方法,但我需要以这样一种方式编写代码,即可以将具有适当格式数据的数据文件读入程序

比如说,

path(1, 4).
setRoutes([[1, 2, 45], [1, 3, 135],
           [2, 4,135], [3, 4, 45]] ).
将是输入数据的格式,因此我已将其硬编码到我的程序中。以下内容不是输入数据的一部分,但我也对其进行了硬编码,以便在我的程序中使用。如何使实际输入的信息“通用”,同时使我自己的代码相对于原始输入“通用”

linkedPoints(1, 2).
linkedPoints(1, 3).
linkedPoints(2, 4).
linkedPoints(3, 4).
我的问题是:我如何才能从必须将数据硬编码到程序本身,到创建“模板”来读取用户输入的数据或将输入的数据归档


让我知道,如果我需要澄清这一切。。。谢谢你的帮助

这很简单:您可以使用内置谓词
read/1
从(例如)文件中读取Prolog术语。因此,只要您的数据以示例中的形式表示,那么无论它是放在程序本身还是放在其他地方都没有什么区别,因为Prolog术语可以从Prolog中轻松处理


您的命名约定中的另一个内容,例如链接点/2
使用下划线像链接点/2

谢谢!因此,
function/number
的数字部分表示要读取的字段数?然而,另一个问题是,如果输入数据仅由
path
setRoutes
组成,我如何使用任意输入数据创建
linkedPoints
?否,
number
是谓词的算术,这是该谓词的参数数。在本例中,
read/1
表示一个名为
read
的谓词,该谓词接受一个参数。试一试:
?-read(T)。
从标准输入读取Prolog术语。例如,输入
test(x)。
+
RET
并查看
T
与术语
test(x)
是统一的。要读取多个术语,您可以使用递归谓词,该谓词使用
read/1
,直到参数与
end\u of_file
统一。至于您的另一个问题,您可能会定义一个将给定路线与链接点相关联的谓词,如
routes\u points/2
,或者可能是
路线\ U点/2
,它只将一条路线与多个点关联。细节取决于您在这里实际需要表示的数据,您没有说。