如何在Prolog中解析文本的第一部分?

如何在Prolog中解析文本的第一部分?,prolog,Prolog,给定这样一个数据库 birthday(daniel,2018-11-22). birthday(paul,2000-01-30). 我需要找到所有在2018年过生日的人。我不知道怎么做。我在考虑其他编程语言中的正则表达式或字符串方法。因此,它类似于startswith(2018-11-2212018)=>true。您不需要解析文本,因为您的日期是规范形式的术语-((年、月、日),因此您只需发布生日(Person,2018-),就可以回溯2018年所有生日的人 要收集列表中的所有人员,您可以使用

给定这样一个数据库

birthday(daniel,2018-11-22).
birthday(paul,2000-01-30).

我需要找到所有在2018年过生日的人。我不知道怎么做。我在考虑其他编程语言中的正则表达式或字符串方法。因此,它类似于startswith(2018-11-2212018)=>true。

您不需要解析文本,因为您的日期是规范形式的术语
-((年、月、日)
,因此您只需发布
生日(Person,2018-)
,就可以回溯2018年所有生日的人

要收集列表中的所有人员,您可以使用以下命令:

findall(Person, birthday(Person, 2018-_-_),  Persons).

使用DCGs:Markus Triska的,Anne Ogborn的,(有更多的参考资料),尽管在这种情况下,你也可以将原子转换成一个字符列表(长度为1的原子),并检查前4个列表条目是否为“2”、“0”、“1”、“8”。