You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决SWI-Prolog中的Syntax error及Singleton变量警告?

解决SWI-Prolog的语法错误与单例变量警告

一、修复语法错误

1. 闭合未完成的括号

grossvater_von/2谓词存在未闭合的括号,且句点位置错误。原代码末尾的mutter_von(C,B).需要补上两个右括号,并将句点移到整个谓词的最后:

grossvater_von(A,B) :- 
  maennlich(A),
  (
    vorfahr_von(A,C),
    (
      vater_von(C,B)
    ;
      mutter_von(C,B)
    )
  ).

2. 修正否定表达式的用法

SWI-Prolog中推荐用\+替代not表示否定,且被否定的析取表达式需要用括号完整包裹。einzelkind/1中的否定部分应修改为:

einzelkind(A) :- 
  (
    vater_von(_,A)
  ;
    mutter_von(_,A)
  ),
  \+ (
      bruder_von(A,_)
    ;
      schwester_von(A,_)
  ).

二、消除单例变量警告

单例变量指谓词中仅出现一次的变量,可使用下划线_替代,明确表示无需使用该变量的值:

  • einzelkind/1中的B、C、D、E:替换为_,避免单例警告;
  • 若无需引用schwester_von/2中母亲的具体身份,也可将C改为_,但保留C能确保是同一个母亲,若weiblich/1有对应事实则不会触发警告。

三、补充缺失的性别事实

代码中调用了weiblich/1和maennlich/1谓词,但未定义对应事实,需补充:

weiblich(Marianne).
weiblich(Barbara).
weiblich(Anna-Lena).
weiblich(Ursula).
weiblich(Uta).
weiblich(Sabrina).

maennlich(Stefan).
maennlich(Christopher).
maennlich(Christian).
maennlich(Ralf).
maennlich(Timo).
maennlich(Thomas).
maennlich(Sven).

四、完整修正后的代码

schwester_von(A,B) :- 
  weiblich(C),
  mutter_von(C,A),
  mutter_von(C,B),
  A \== B.

grossvater_von(A,B) :- 
  maennlich(A),
  (
    vorfahr_von(A,C),
    (
      vater_von(C,B)
    ;
      mutter_von(C,B)
    )
  ).

vorfahr_von(A,B) :- 
  vater_von(A,B)
  ;
  mutter_von(A,B)
  ;
  (
    (
      vater_von(A,C)
    ;
      mutter_von(A,C)
    ),
    vorfahr_von(C,B)
  ).

einzelkind(A) :- 
  (
    vater_von(_,A)
  ;
    mutter_von(_,A)
  ),
  \+ (
      bruder_von(A,_)
    ;
      schwester_von(A,_)
  ).

% 性别事实
weiblich(Marianne).
weiblich(Barbara).
weiblich(Anna-Lena).
weiblich(Ursula).
weiblich(Uta).
weiblich(Sabrina).

maennlich(Stefan).
maennlich(Christopher).
maennlich(Christian).
maennlich(Ralf).
maennlich(Timo).
maennlich(Thomas).
maennlich(Sven).

% 亲属关系事实
vater_von(Stefan,Barbara).
vater_von(Stefan,Anna-Lena).
mutter_von(Marianne,Barbara).
mutter_von(Marianne,Anna-Lena).
mutter_von(Barbara,Timo).
vater_von(Christopher,Timo).
mutter_von(Anna-Lena,Ursula).
mutter_von(Anna-Lena,Thomas).
vater_von(Christian,Ursula).
vater_von(Christian,Thomas).
mutter_von(Ursula,Uta).
vater_von(Ralf,Uta).
vater_von(Thomas,Sven).
mutter_von(Sabrina,Sven).

内容的提问来源于stack exchange,提问作者daniel235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:41:22