我想在GNU Prolog中編寫一個謂詞來測試一個羅馬數字是否存儲爲字符列表,並且格式正確。即,如果列表包含[i,c],[i,m]或[x,m],則它是無效的。例如,如果我通過[m,i,m],輸出將是no
。如何測試列表中是否包含Prolog中彼此相鄰的兩個原子?
我該怎麼做呢?我知道成員/ 2的功能;有沒有一種方法可以用來測試列表是否包含子列表?
我想在GNU Prolog中編寫一個謂詞來測試一個羅馬數字是否存儲爲字符列表,並且格式正確。即,如果列表包含[i,c],[i,m]或[x,m],則它是無效的。例如,如果我通過[m,i,m],輸出將是no
。如何測試列表中是否包含Prolog中彼此相鄰的兩個原子?
我該怎麼做呢?我知道成員/ 2的功能;有沒有一種方法可以用來測試列表是否包含子列表?
發現一個內置的子列表功能,它正是我需要的:
子列表([I,M],[M,I,M])==>true
考慮使用語法(dcg)。並使用
:- set_prolog_flag(double_quotes, chars).
,它允許你在的地方[m,c,m]
寫"mcm"
。有關更多信息,請參閱this answer。