[英]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
(带有一个参数)。 此外,不是传递列表的尾部,而是构造一个包含两个元素的列表,其中第一个元素是尾部。
谓词成功或失败。 因此,已经有一个true
或false
这里。 您不需要为此添加额外的参数。 如果谓词失败,它将在标准输出通道上打印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.