【问题标题】:How to create condition for functor's argument in a rule - PROLOG如何在规则中为仿函数的参数创建条件 - PROLOG
【发布时间】:2020-04-03 18:57:21
【问题描述】:

我目前正在学习 Prolog,我想创建一个特定的规则来检查一个人是否可以看电影。真实的条件应该是人的年龄大于电影要求的年龄。

所以我有类似的东西:


person("John",19).
person("Kate",14).
person("Carl",8).

film("Shining",18,"Horror").
film("Little Agents",13,"Family").
film("Frozen",7,"Animation").

can_borrow(film(_,Age1,_),person(_,Age2)):-Age2>=Age1.

如果我问,即

?- can_borrow(film("Shining",18,"Horror"),person("John",19)).

它工作并返回 true。

但是当我要求向我展示所有可能的组合时(每个人都可以观看的所有电影)

?- can_borrow(X,Y).

我有一个错误:

ERROR: Arguments are not sufficiently instantiated

如何正确地编写规则,让它像我上面写的那样工作?

提前致谢。

【问题讨论】:

    标签: prolog


    【解决方案1】:

    can_borrow(film(_, Age1, _), person(_, Age2)) 中的film(_, Age1, _)person(_, Age2) 只是术语,带有一个碰巧 与谓词相同的函子。但是 Prolog 并没有赋予它特殊的含义。您应该在这里调用谓词来统一术语。例如:

    can_borrow(film(Title, Age1, Genre), person(Name, Age2)) :-
        film(Title, Age1, Genre),
        person(Name, Age2),
        Age1 =< Age2.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多