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

问题描述 投票:1回答:2

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

我该怎么做呢?我知道member / 2的功能;有没有办法用它来测试列表是否包含子列表?

prolog dcg roman-numerals
2个回答
1
投票

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

sublist([i, m], [m, i, m]) ==> `true`

0
投票

考虑使用语法()。并使用

:- set_prolog_flag(double_quotes, chars).

这允许你写"mcm"代替[m,c,m]。有关更多信息,请参阅this answer

© www.soinside.com 2019 - 2024. All rights reserved.