没有函子的 prolog 术语

发布于 2024-12-10 13:34:32 字数 244 浏览 1 评论 0原文

我面临着有关列表和术语的序言问题。那么我的问题是如何编写一个谓词

transform([a,b],X)

将返回 X = (a,b) 或反之亦然

这对我来说很奇怪,因为我以前从未遇到过这样的术语。我尝试使用内置 =.. 但

=..((a,b,c,d),X)

返回 X=[',',a,(b,c,d)] 这让我深感失望。 谢谢。

I am facing a prolog problem regarding List and Term. Then my question is how to write a predicate

transform([a,b],X)

will return X = (a,b) Or vice versa

This is weird with me because I've never faced such term before. I tried with the built in =.. but

=..((a,b,c,d),X)

returns X=[',',a,(b,c,d)] which makes me deeply disappoint.
Thank you.

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

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

发布评论

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

评论(1

驱逐舰岛风号 2024-12-17 13:34:32

检查如下内容:

transform([A], A):-
  A=..[_].
transform([A,B], (A,B)):-
  B=..[_].
transform([A,B,C|Tail], L):-
  L=..[',',A,T],
  transform([B,C|Tail], T).

仅当您想要转换([Item],Item)时才需要第一个子句。

?- transform([a,b], X).
X = (a, b) 

?- transform([a,b,c,d,e,f], X).
X = (a, b, c, d, e, f) 

?- transform(L, (a,b,c,d,e,f,g))
L = [a, b, c, d, e, f, g] 

请注意,您正在构建的术语确实有一个函子,它是 ','/2,并且它显示在您看到的括号中。

Check something like this:

transform([A], A):-
  A=..[_].
transform([A,B], (A,B)):-
  B=..[_].
transform([A,B,C|Tail], L):-
  L=..[',',A,T],
  transform([B,C|Tail], T).

The first clause is only needed if you want transform([Item], Item).

?- transform([a,b], X).
X = (a, b) 

?- transform([a,b,c,d,e,f], X).
X = (a, b, c, d, e, f) 

?- transform(L, (a,b,c,d,e,f,g))
L = [a, b, c, d, e, f, g] 

Note that the term you are building does have a functor, it is ','/2, and it is shown with the parenthesis you are seeing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文