Prolog规则问题:查询指定年份后电影仅返回true而非片名求解
Prolog规则仅返回true不输出电影标题的问题解决
你的规则代码存在变量绑定的问题:
movies_released_after(QYear, QMovie):- movie(M,Y), Y>=QYear.
规则定义的第二个参数QMovie,和规则体里代表电影标题的变量M完全没关联。Prolog不知道你要把符合条件的电影标题M作为结果返回,所以只要数据库里存在满足Y>=QYear的电影,就只会返回true,不会输出具体的电影名。
修正方法很简单,把规则里的变量对应起来就行,两种写法都可以:
- 直接在
movie谓词里用QMovie作为电影标题变量:
movies_released_after(QYear, QMovie):- movie(QMovie,Y), Y>=QYear.
- 显式把
M绑定到QMovie上:
movies_released_after(QYear, QMovie):- movie(M,Y), Y>=QYear, QMovie = M.
修改后,比如执行查询movies_released_after(2010, Movie).,Prolog就会返回所有2010年及以后上映的电影标题了。
内容的提问来源于stack exchange,提问作者Justin123
相关产品推荐
相关产品推荐

