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

请求解释Prolog代码执行逻辑及指定查询的输出结果

Prolog代码功能与执行过程分析

功能说明

这段代码是一个列表元素范围筛选工具,核心作用是从输入列表中提取所有满足 N ≤ 元素 ≤ M 的元素,并保留原列表的元素顺序,生成新的结果列表。

子句拆解与执行逻辑

代码包含4个子句,构成递归处理逻辑:

  • 基础终止子句:p([],[],_).
    当输入的原列表为空时,结果列表也为空,第三个(N)和第四个(M)参数无限制,这是递归的终止条件。
  • 保留符合条件元素的子句:p([H|T],[H|R],N,M) :-H >= N, H =< M, p(T,R,N,M).
    如果当前列表的头元素H落在[N, M]区间内,就将H加入结果列表,然后递归处理剩余的列表T,生成结果列表的剩余部分R。
  • 跳过小于N的元素:p([H|T],R,N,M) :- H < N, p(T,R,N,M).
    如果H小于下限N,直接跳过该元素,递归处理剩余列表T,结果列表的剩余部分R由后续处理生成。
  • 跳过大于M的元素:p([H|T],R,N,M) :- H > M, p(T,R,N,M).
    如果H大于上限M,直接跳过该元素,递归处理剩余列表T,结果列表的剩余部分R由后续处理生成。

查询语句p([5,3,6,3,7],L,4,7).的执行过程与结果

执行步骤

  1. 初始调用p([5,3,6,3,7],L,4,7):头元素5满足4≤5≤7,将5加入结果,递归处理剩余列表[3,6,3,7],记结果剩余部分为R1,即L=[5|R1]。
  2. 处理[3,6,3,7]:头元素3<4,跳过该元素,递归处理剩余列表[6,3,7],记结果剩余部分为R2,即R1=R2。
  3. 处理[6,3,7]:头元素6满足4≤6≤7,将6加入结果,递归处理剩余列表[3,7],记结果剩余部分为R3,即R2=[6|R3]。
  4. 处理[3,7]:头元素3<4,跳过该元素,递归处理剩余列表[7],记结果剩余部分为R4,即R3=R4。
  5. 处理[7]:头元素7满足4≤7≤7,将7加入结果,递归处理剩余列表[],触发终止子句,结果剩余部分为[],即R4=[7|[]]。
  6. 回溯拼接所有结果:R4=[7] → R3=[7] → R2=[6,7] → R1=[6,7] → L=[5,6,7]。

输出结果

查询最终返回:

L = [5, 6, 7]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:27:11