代码之家  ›  专栏  ›  技术社区  ›  Patrick Bucher

SWI Prolog:无法定义新运算符

  •  3
  • Patrick Bucher  · 技术社区  · 6 年前

    我有一个事实数据库:

    female(mary). female(liz). female(mia). female(tina). female(ann). female(sue).
    male(mike). male(jack). male(fred). male(tom). male(joe). male(jim).
    parent(mary, mia). parent(mary, fred). parent(mary, tina).
    parent(mike, mia). parent(mike, fred). parent(mike, tina).
    parent(liz, tom). parent(liz, joe).
    parent(jack, tom). parent(jack, joe).
    parent(mia, ann).
    parent(tina, sue). parent(tina, jim).
    parent(tom, sue). parent(tom, jim).
    

    我定义了 mother

    mother(M, C) :- parent(M, C), female(M).
    

    谓词按预期工作:

    ?- mother(liz, tom).
    true .
    
    ?- mother(liz, fred).
    false.
    

    liz mother tom

    op(1111, xfx, mother).
    

    这就给了我一个错误:

    ERROR: /home/user/prolog/family.pl:13:
           No permission to modify static procedure `op/3'
    

    我不知道我做错了什么。

    根据要求,以下是一个列表中的完整文件:

    female(mary). female(liz). female(mia). female(tina). female(ann). female(sue).
    male(mike). male(jack). male(fred). male(tom). male(joe). male(jim).
    parent(mary, mia). parent(mary, fred). parent(mary, tina).
    parent(mike, mia). parent(mike, fred). parent(mike, tina).
    parent(liz, tom). parent(liz, joe).
    parent(jack, tom). parent(jack, joe).
    parent(mia, ann).
    parent(tina, sue). parent(tina, jim).
    parent(tom, sue). parent(tom, jim).
    
    mother(M, C) :- parent(M, C), female(M).
    op(1111, xfx, mother).
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Patrick Bucher    6 年前

    正如@looker在评论中所描述的, op/3 是一个指令。工作原理如下:

    :- op(1111, xfx, mother).