【问题标题】:Prolog: Many families written with lists. Questions answers only for last family writen序言:许多家庭都写有清单。只为最后一个家庭写的问题答案
【发布时间】:2015-11-27 18:24:49
【问题描述】:

我已经写了 4 个家庭列表和一些规则,如下所示:

     family(
person( tom,  fox,  date(7,may,1960),  works( bbc,  15200)),
person( ann,  fox,  date(9,may,1961),  unemployed),
[ person( pat,  fox,  date(5,may,1983),  unemployed),
   person( jim,  fox,  date(5,may,1983),  unemployed) ] ).


     family(
person( chris,  adler,  date(1,jan,1965),  works( rekit,  23000)),
person( mary,  adler,  date(7,apr,1968),  works( dia, 9500),
[ person( john,  adler,  date(19,apr,1995),  unemployed),
   person( randal,  adler,  date(22,nov,1992),  unemployed) ] ).


     family(
person( james,  gordon,  date(23,aug,1953),  works( GCPD,  17000)),
person( kristen,  gordon,  date(22,may,1955), works( Hospital, 15000),
[ person( penny,  gordon,  date(2,dec,1995),  unemployed),
   person( george,  gordon,  date(2,dec,1995),  unemployed),
   person( nick,  gordon,  date(15,sep,1993),  unemployed) ] ).



     family(
person( bilbo,  baggins,  date(7,may,1980),  works( farmer,  19200)),
person( beladona,  baggins,  date(9,sep,1971),  works( farmer,  18200)),
[ person( frodo,  baggins,  date(15,jun,1995),  unemployed),
   person( sam,  baggins,  date(25,may,1993),  unemployed) ],
   person( mery,  baggins,  date(9,mar,1992),  unemployed),
   person( pippin,  baggins,  date(17,dec,1998),  unemployed), ).



     family(
person( ragnar,  lothbrok,  date(7,may,1970),  works( WarIN,  19500)),
person( lagertha,  lothbrok,  date(9,may,1971),  unemployed),
[ person( rolo,  lothbrok,  date(5,may,1995),  unemployed),
   person( bjorn,  lothbrok,  date(5,may,1983),  unemployed) ] ).




     husband( X) :- family( X,  _,  _).
     wife( X) :- family( _,  X,  _).
     child( X) :- family( _,  _,  Children),  member( X,  Children).
     exists( Persons) :- husband( Persons); wife( Persons);
                                     child( Persons).
     dateofbirth( person(_,  _,  Date,  _),  Date).

问题是当我问一个问题时:

?- child( X),  dateofbirth( X,  date( _,  _,  1995)).

我得到了最后一个家庭的孩子,而不是全部 4 个。

X = person(rolo, lothbrok, date(5, may, 1995), unemployed) ;
false.

有什么帮助吗?

【问题讨论】:

    标签: prolog family-tree


    【解决方案1】:

    您需要做的就是修复知识库中的一些语法错误。当第二个父母有工作时,您缺少右括号。此外,您应该对医院、GCPG 和 WarnIn 等原子使用小写符号。

    family(
    person( tom,  fox,  date(7,may,1960),  works( bbc,  15200)),
    person( ann,  fox,  date(9,may,1961),  unemployed),
    [ person( pat,  fox,  date(5,may,1983),  unemployed),
       person( jim,  fox,  date(5,may,1983),  unemployed) ] ).
    
    family(
    person( chris,  adler,  date(1,jan,1965),  works( rekit,  23000)),
    person( mary,  adler,  date(7,apr,1968),  works( dia, 9500)),
    [ person( john,  adler,  date(19,apr,1995),  unemployed),
       person( randal,  adler,  date(22,nov,1992),  unemployed) ] ).
    
    family(
    person( james,  gordon,  date(23,aug,1953),  works( gcpd,  17000)),
    person( kristen,  gordon,  date(22,may,1955), works( hospital, 15000)),
    [ person( penny,  gordon,  date(2,dec,1995),  unemployed),
       person( george,  gordon,  date(2,dec,1995),  unemployed),
       person( nick,  gordon,  date(15,sep,1993),  unemployed) ] ).
    
    family(
    person( bilbo,  baggins,  date(7,may,1980),  works( farmer,  19200)),
    person( beladona,  baggins,  date(9,sep,1971),  works( farmer,  18200)),
    [ person( frodo,  baggins,  date(15,jun,1995),  unemployed),
       person( sam,  baggins,  date(25,may,1993),  unemployed) ,
       person( mery,  baggins,  date(9,mar,1992),  unemployed),
       person( pippin,  baggins,  date(17,dec,1998),  unemployed)] ).
    
    family(
    person( ragnar,  lothbrok,  date(7,may,1970),  works( warin,  19500)),
    person( lagertha,  lothbrok,  date(9,may,1971),  unemployed),
    [ person( rolo,  lothbrok,  date(5,may,1995),  unemployed),
       person( bjorn,  lothbrok,  date(5,may,1983),  unemployed) ] ).
    
    husband( X) :- family( X,  _,  _).
    wife( X) :- family( _,  X,  _).
    child( X) :- family( _,  _,  Children),  member( X,  Children).
    exists( Persons) :- husband( Persons); wife( Persons);
                                         child( Persons).
    dateofbirth( person(_,  _,  Date,  _),  Date).
    

    测试:

    child( X),  dateofbirth( X,  date( _,  _,  1995)).
    

    结果:

    X = person(john, adler, date(19, apr, 1995), unemployed)
    X = person(penny, gordon, date(2, dec, 1995), unemployed)
    X = person(george, gordon, date(2, dec, 1995), unemployed)
    X = person(frodo, baggins, date(15, jun, 1995), unemployed)
    X = person(rolo, lothbrok, date(5, may, 1995), unemployed)
    false
    

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      相关资源
      最近更新 更多