在Prolog中提取结构内容

在Prolog中提取结构内容,prolog,Prolog,假设我有这样一个结构: 航班(波士顿、纽约、时间(7,30)) 以变量形式:My\u Flight 如果将此变量传递到如下函数中: my_func(Flight) :- write(Flight[0]) 如何提取结构的内容,并对每个部分进行处理,如上面函数的第二行 抱歉,如果我的术语关闭了,我对这种语言还很陌生 首先,我建议您以声明的方式思考: 要使my_func/1保持不变,这种结构的属性必须是什么 回答:my_func/1要保留,首先,Flight必须采用以下格式 航班(从、到、时间

假设我有这样一个结构:

航班(波士顿、纽约、时间(7,30))

以变量形式:
My\u Flight

如果将此变量传递到如下函数中:

my_func(Flight) :-
   write(Flight[0])
如何提取结构的内容,并对每个部分进行处理,如上面函数的第二行


抱歉,如果我的术语关闭了,我对这种语言还很陌生

首先,我建议您以声明的方式思考:

要使
my_func/1
保持不变,这种结构的属性必须是什么

回答:
my_func/1
要保留,首先,
Flight
必须采用以下格式

航班(从、到、时间)

使用
(=)/2
或更好的是,直接模式匹配,我们已经可以将其表述为对参数的约束

my_func(flight(From,To,Time)) :- ... my_func(航班(从,到,时间)):- ... 然后说明
my_func/1
要保留的参数还必须保留哪些内容


不要想“我如何提取…”,因为该参数甚至可能没有实例化。相反,要问:“这个论点必须具备哪些条件?”这为更多的用法模式铺平了道路:提取、构造、检查等等。

首先,我建议您以声明的方式思考

要使
my_func/1
保持不变,这种结构的属性必须是什么

回答:
my_func/1
要保留,首先,
Flight
必须采用以下格式

航班(从、到、时间)

使用
(=)/2
或更好的是,直接模式匹配,我们已经可以将其表述为对参数的约束

my_func(flight(From,To,Time)) :- ... my_func(航班(从,到,时间)):- ... 然后说明
my_func/1
要保留的参数还必须保留哪些内容


不要想“我如何提取…”,因为该参数甚至可能没有实例化。相反,要问:“这个参数必须包含什么?”这为更多的用法模式铺平了道路:提取、构造、检查等等。

不,Prolog不像其他语言那样有数组语法。Prolog甚至没有函数。它有谓词。要“提取内容”,您需要进行模式匹配。所以
my_谓词(Flight):-Flight=Flight(From,To,Time),…
,甚至
my_谓词(Flight(From,To,Time)):-…
那么
From
To
Time将得到您想要的。如果需要进一步分解时间,可以执行
time=time(H,M)
甚至是
my_谓词(flight(From,to,time(H,M)):-…
。与其说是模式匹配,不如说是统一,这是Prolog中的一个基本行为。它通过术语的统一进行操作。不,Prolog不像其他语言那样有数组语法。Prolog甚至没有函数。它有谓词。要“提取内容”所以
my_谓词(Flight):-Flight=Flight(From,To,Time),…
,或者甚至
my_谓词(Flight(From,To,Time)):-…
那么
From
To
Time
就有你想要的了。如果你需要进一步细分时间,你可以做
Time=Time(H,M)
甚至,
我的谓词(flight(From,To,time(H,M)):-…
。与其说是模式匹配,不如说是统一,这是Prolog中的一个基本行为。它通过术语的统一进行操作。