[英]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.