搜索 Prolog 结构

发布于 2024-10-01 13:14:33 字数 394 浏览 4 评论 0原文

我对由大量连词组成的公式感兴趣(更大问题的一部分)。我想编写一个程序,采用如下所示的内容:

:- get_params(conj(conj(a,b),c),X)

并返回连词的所有参数的列表,即 <代码>X=[a,b,c]。目前我可以使用简单的 Prolog 模式匹配来

:- get_params(conj(a,b),X) 来获取 X=[a,b]

但如何您可以执行诸如

:- get_params(conj(conj(a,b),c),X) 之类的操作来获取 X=[a,b,c]

看起来很简单,但我已经奋斗了一整天了!

I'm interested in formulae made up from lots of conjunctions (part of a larger problem). I want to write a program that takes something like this:

:- get_params(conj(conj(a,b),c),X)

and returns a list of all the parameters of the conjunctions i.e. X=[a,b,c]. At the moment I can do

:- get_params(conj(a,b),X) to get X=[a,b]

using simple Prolog pattern matching but how would you go about doing things such as

:- get_params(conj(conj(a,b),c),X) to get X=[a,b,c]

It seems really simple but I've been struggling all day!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鸩远一方 2024-10-08 13:14:33

由于您正在描述一个列表,请考虑使用 DCG 表示法:

params(conj(A,B)) --> !, params(A), params(B).
params(X)         --> [X].

示例:

?- phrase(params(conj(conj(a,b),c)), Ps).
Ps = [a, b, c].

Since you are describing a list, consider using DCG notation:

params(conj(A,B)) --> !, params(A), params(B).
params(X)         --> [X].

Example:

?- phrase(params(conj(conj(a,b),c)), Ps).
Ps = [a, b, c].
转身以后 2024-10-08 13:14:33

假设所有 conj 函子都是二元的:

get_params(X, Y, L) :- 
  get_params(X, L1),
  get_params(Y, L2),
  append(L1, L2, L).
get_params(conj(X, Y), L) :-
  get_params(X, Y, L), !.
get_params(A, [A]).

Assuming that all conj functors are binary:

get_params(X, Y, L) :- 
  get_params(X, L1),
  get_params(Y, L2),
  append(L1, L2, L).
get_params(conj(X, Y), L) :-
  get_params(X, Y, L), !.
get_params(A, [A]).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文