prolog - Prolog中两个函数的返回值相等
问题描述
我有一个电影数据库,其中包含以下术语
movie(blood_simple, 1984).
movie(the_cotton_club, 1984).
movie(american_beauty, 1999).
...
我想编写一个函数,如果两部给定的电影在同一年发行,则返回 true,否则返回 false。
我在比较两个值时遇到问题,我的函数总是返回 false。
这是我的代码:
sameyear(Movie1,Movie2):-
movie(Movie1,Year1),
movie(Movie2,Year2).
% here I tried comparing Year1 with Year2 like: Year1 == Year2, Year1 =:= Year2, nothing worked.
另一个代码:
sameyear(Movie1,Movie2):-
movie(Movie1,Year1),
movie(Movie2,Year1). % here I expected that it would return true if the movies were released at the
same year, because Year1 has already got a value at *movie(Movie1,Year1)*, but that didn't happen
你能帮助我吗?
解决方案
您在子句.
末尾写了一个点 ( )。movie(Movie2, Year2)
因此,这意味着您结束了谓词。如果你然后写Year1 == Year2.
,那么这是另一个规则。
因此,您应该使用逗号,它在语义上接近逻辑 and:
sameyear(Movie1,Movie2):-
movie(Movie1,Year1),
movie(Movie2,Year2), % ← added a comma
Year1 == Year2.
这会产生:
?- sameyear(M1, M2).
M1 = M2, M2 = blood_simple ;
M1 = blood_simple,
M2 = the_cotton_club ;
M1 = the_cotton_club,
M2 = blood_simple ;
M1 = M2, M2 = the_cotton_club ;
M1 = M2, M2 = american_beauty.
推荐阅读
- node.js - NODEJS 如何获取 gifsicle 中的路径输入?
- regex - 我需要使用正则表达式从以下阶段获取金额值
- javascript - JSON 中位置 0 的意外令牌 - REST API(节点和快递)
- google-cloud-platform - 无法使用 terraform 在 gcp 中运行 startup_script
- windows-shell - IFileOperation:如何判断一个文件夹的重命名是否与另一个文件夹合并?
- python - 在遍历 ndarray 时访问相邻列中的元素
- python - 获取给定 I/P 的绝对值所需的映射函数
- c++ - 以下代码的双重释放或损坏
- reactjs - 获取文本字段中的数据并创建一个对象 React JS
- rust - Using a crate errors with "linking with cc failed", while building its source project succeeds