如何解构 SWI Prolog 中的复合项
How to deconstruct a compound term in SWI Prolog
我有复合词,大括号内可以有数字。
例如:qpowieipq(5),lsjdlasa(15)
或 lkjlk
。我从数据库中得到它(比如my_list([rxclk,rxer,rxdv,rxd(0),rxd(1),rxd(2),crs,col,txen,txd(0),txd(1),txd(2),txd(3)]).
)。
如何获取大括号内数字的值?
例如:
my_function(qpowieipq(5), X).
X=5.
my_function(lsjdlasa(15), X).
X=15.
my_function(lkjlk, X).
false
我正在使用 SWI Prolog。
您可以使用 (=..)/2 和模式匹配来解构 Prolog 的复合术语。例如
?- a =.. X.
X = [a].
?- a(1) =.. X.
X = [a, 1].
所以,暂定
my_function(T, V) :- T =.. [_,V], number(V).
这将适用于任何符合 ISO 标准的 Prolog 处理器。
我有复合词,大括号内可以有数字。
例如:qpowieipq(5),lsjdlasa(15)
或 lkjlk
。我从数据库中得到它(比如my_list([rxclk,rxer,rxdv,rxd(0),rxd(1),rxd(2),crs,col,txen,txd(0),txd(1),txd(2),txd(3)]).
)。
如何获取大括号内数字的值?
例如:
my_function(qpowieipq(5), X).
X=5.
my_function(lsjdlasa(15), X).
X=15.
my_function(lkjlk, X).
false
我正在使用 SWI Prolog。
您可以使用 (=..)/2 和模式匹配来解构 Prolog 的复合术语。例如
?- a =.. X.
X = [a].
?- a(1) =.. X.
X = [a, 1].
所以,暂定
my_function(T, V) :- T =.. [_,V], number(V).
这将适用于任何符合 ISO 标准的 Prolog 处理器。