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

Prolog中如何用setof替代findall计算国家边境总长度

Prolog 边境总长度计算 setof 实现方案

前提事实定义

borders(sweden,finland,586).
borders(norway,sweden,1619).

实现逻辑说明

setof 和 findall 的核心差异是:setof 会默认对自由变量分组、且自动对结果去重。要对齐原 findall 的收集逻辑,需要对目标中的匿名邻国变量做存在量化标记,避免 setof 按邻国分组返回多组结果。

最终代码实现

circumference(C, Country) :-
    setof(X, Neighbour^( borders(Country, Neighbour, X) ; borders(Neighbour, Country, X)), Kms),
    sum_list(Kms, C).

代码说明

  • 语法中的Neighbour^是Prolog的存在量化标记,表示我们不关心邻国的具体取值,所有满足边境条件的长度值都会被收集到同一个列表Kms中
  • 如果你需要完全对齐原findall保留重复记录的逻辑(比如事实中存在同一段边境重复录入的场景),可以把setof替换为bagof,其余语法完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:08