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

如何修改Prolog代码按指定数量输出对应城市地标

修改Prolog程序实现指定数量地标按序输出

现有一段Prolog程序,输入目标城市名称和想要游览的地标数量后,会输出该城市的所有地标。需要修改代码,使其按地标初始化的顺序输出用户指定数量的地标。例如输入城市为Vienna、指定数量为3时,程序应返回:Hundertwasser House, Vienna State Opera, Schonbrunn Palace.

原代码

landmark("Vienna", "Hundertwasser House").
landmark("Vienna", "Vienna State Opera").
landmark("Vienna", "Schonbrunn Palace").
landmark("Vienna", "The Hofburg").
landmark("Vienna", "Belvedere Palace").

suggest_landmark:-    
    write('Name of the city interested in: '),
    nl,
    read(X),
    format('City: ~w.', [X]), nl, nl,

    write('Number of landmarks: '),
    nl,
    read(Y),
    format('Landmarks: ~w.', [Y]), nl, nl,

    landmark(X, Z),
    format('Landmarks: ~w.', [Z]), nl,
    fail.

修改后的代码

landmark("Vienna", "Hundertwasser House").
landmark("Vienna", "Vienna State Opera").
landmark("Vienna", "Schonbrunn Palace").
landmark("Vienna", "The Hofburg").
landmark("Vienna", "Belvedere Palace").

suggest_landmark:-    
    write('Name of the city interested in: '),
    nl,
    read(X),
    format('City: ~w.', [X]), nl, nl,

    write('Number of landmarks: '),
    nl,
    read(Y),
    format('Landmarks: ~w.', [Y]), nl, nl,

    % 调用辅助谓词控制取地标数量
    suggest_n_landmarks(X, 1, Y).

% 终止条件:已取数量超过目标时停止
suggest_n_landmarks(_, Current, Target) :-
    Current > Target, !.

% 按顺序取地标并输出,计数递增
suggest_n_landmarks(City, Current, Target) :-
    landmark(City, Landmark),
    format('~w', [Landmark]),
    % 处理输出分隔符:最后一个加句号,其余加逗号空格
    (Current = Target -> format('.~n', []) ; format(', ', [])),
    Next is Current + 1,
    suggest_n_landmarks(City, Next, Target).

关键修改点

  1. 新增辅助谓词suggest_n_landmarks/3,通过计数控制输出数量:
    • 第一个子句作为终止条件,当当前计数超过目标数量时,用截断符!阻止回溯,避免遍历剩余地标。
    • 第二个子句按Prolog事实定义的顺序匹配地标,输出后递归调用自身,直到达到指定数量。
  2. 优化输出格式,让多个地标用逗号分隔,最后一个地标后添加句号,与示例输出格式一致。
  3. 移除原代码中用fail强制回溯输出所有地标的逻辑,改为计数控制终止流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:01:14