如何在Prolog中测试列表是否包含两个相邻的原子?

如何在Prolog中测试列表是否包含两个相邻的原子?,prolog,dcg,roman-numerals,Prolog,Dcg,Roman Numerals,我试图在GNU Prolog中编写一个谓词,测试存储为字符列表的罗马数字的格式是否正确。也就是说,如果列表包含[i,c]、[i,m]或[x,m],则该列表无效。例如,如果我传入[m,I,m],输出将是no 我该怎么做呢?我知道会员/2的职能;有没有一种方法可以使用它来测试列表是否包含子列表?找到了一个内置的子列表函数,它完全满足了我的需要: sublist([i, m], [m, i, m]) ==> `true` 考虑使用语法()。和使用 它允许您编写“mcm”来代替[m,c,m]。更

我试图在GNU Prolog中编写一个谓词,测试存储为字符列表的罗马数字的格式是否正确。也就是说,如果列表包含[i,c]、[i,m]或[x,m],则该列表无效。例如,如果我传入[m,I,m],输出将是
no


我该怎么做呢?我知道会员/2的职能;有没有一种方法可以使用它来测试列表是否包含子列表?

找到了一个内置的子列表函数,它完全满足了我的需要:

sublist([i, m], [m, i, m]) ==> `true`
考虑使用语法()。和使用

它允许您编写
“mcm”
来代替
[m,c,m]
。更多信息,请参阅

:- set_prolog_flag(double_quotes, chars).