我有一个问题(再次:))。我们假设我们有以下数据: 第一个数字是月份的第二天,第三个是事件
day(1,1, 'New Year')
day(1,1, 'The day after the new year')
day(23,1, 'The day i will finally understand this language :)')
day(14,2, 'Valentin's day')
day(16,2, 'Family day')
day(22,2, 'hein.. dont now lol')
nday(1,31).
nday(2,28).
nday(3,31).
nday(4,30).
nday(5,31).
我要求创建一个谓词,以便给定Day
,它返回一个月(仅当给定的一天没有事件时。例如freeDay(23,X)
。{{1}如果X
等于4,它应该保持为1(如果我们进入半冒号,它将返回2,因为第4天也没有2月的任何事件。我有更多的数据。所以我做了以下但我得到了值0.
X
你能告诉我我做错了吗?
答案 0 :(得分:1)
您的代码的作用:
freeDay(23,X)
,freeDay(X,Answer)
成功拨打freeDay(X, 1, Answer)
。freeDay(_, Month,0):- Month > 12, !.
不适用,因为月份是1,它会移动到下一个谓词。freeDay(Day, Month,X)
适用,它的作用是增加月份并调用自身(递归)。freeDay(_, Month,0):- Month > 12, !
成功。freeDay(_, Month,0):- Month > 12, !.
通过使用剪切注释!
来中断循环(递归)并返回在这种情况下为0的Answer。 (用简单的英语在这里你说无论哪一天,如果月份大于12,则返回0.这是最后执行的语句。)我希望你明白什么是错的。一般来说,逻辑编程需要在框外思考。你需要第一次来理解这个问题,然后以简单的方式尝试解决。