繁体   English   中英

带有原子元素的列表 Swi-Prolog

[英]List with atomic elements Swi-Prolog

我被这个问题困住了。 我想检查列表中的所有元素是否都是原子的,但我无法解决。

例如:
[]是原子的

列表[1, 2, 3]由原子元素组成

列出[[1], 2, 3]不是因为[1]是复合的

我的问题的另一个更好的解决方案是,如果列表中有一个或多个复合元素,则使谓词失败。 有人可以帮助我吗?

这就是我试图做的。

check_atomic([], true).   
check_atomic([H | T], true) :-
   atomic(H),
   check_atomic([T, _ ]).

问题是你在这里定义了一个check_atomic/2 然而,在第二种情况下,您调用谓词check_atomic/1 (带有一个参数)。 此外,不是传递列表的尾部,而是构造一个包含两个元素的列表,其中第一个元素是尾部。

谓词成功或失败。 因此,已经有一个truefalse这里。 您不需要为此添加额外的参数。 如果谓词失败,它将在标准输出通道上打印false (或no )。

因此,我们可以通过将其重写为:

check_atomic([]).
check_atomic([H|T]) :-
    atomic(H),
    check_atomic(T).

使用maplist/2

你可以在这里使用maplist/2 [swi-doc] ,作为谓词使用atomic/1 [swi-doc]

check_atomic(L) :-
    maplist(atomic, L).

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM