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

如何在Prolog中打印dynamic/1下内容 单条查询输出所有男性名称

Prolog打印dynamic谓词存储内容的方法

首先假设你已经提前声明了对应dynamic谓词,示例中存储男性名称的谓词声明为:

:- dynamic male/1.
% 已提前存入示例数据
assertz(male(张三)).
assertz(male(李四)).
assertz(male(王五)).

方法1:直接使用内置listing/1打印所有子句

这是最简单的方式,直接输出对应dynamic谓词的所有事实定义:

% 打印male/1的所有存储内容
listing(male/1).

输出示例:

male(张三).
male(李四).
male(王五).

方法2:遍历打印仅名称内容

如果不需要输出谓词名,只需要打印存储的名称值,可以用forall/2遍历匹配所有结果逐个输出:

forall(male(Name), (write(Name), nl)).

输出示例:

张三
李四
王五

方法3:收集为列表统一打印

如果需要先把所有名称收集到列表中再统一输出,可以用findall/3实现:

findall(Name, male(Name), MaleList), write(MaleList).

输出示例:

[张三, 李四, 王五]

通用方法:打印任意dynamic谓词的内容

如果你需要一个通用的查询语句,支持传入任意dynamic谓词名和元数打印所有内容,可以定义如下通用谓词:

print_dynamic(PredName, Arity) :-
    functor(Term, PredName, Arity),
    forall(clause(Term, true), (write(Term), nl)).

调用示例(打印male/1的所有内容):

print_dynamic(male, 1).

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:03