簡體   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