我试图在GNU Prolog中编写一个谓词,用于测试存储为字符列表的罗马数字是否格式正确。即,如果列表包含[i,c],[i,m]或[x,m],则它是无效的。例如,如果我传入[m,i,m],则输出将为no
。
我该怎么做呢?我知道member / 2的功能;有没有办法用它来测试列表是否包含子列表?
找到了一个内置的子列表函数,它完全符合我的需要:
sublist([i, m], [m, i, m]) ==> `true`
考虑使用语法(dcg)。并使用
:- set_prolog_flag(double_quotes, chars).
这允许你写"mcm"
代替[m,c,m]
。有关更多信息,请参阅this answer。