将字符串附加到 prolog 中的列表



我是Prolog上的新手,我已经有一些问题需要理解了,事情是,我正在测试附加控制台引入的一些字符串:

append_str([],Adder,Adder).
append_str([Head|Tail],Adder,Result):-
    append_str(Tail,[Head|Adder],Result).
sread_str(String):-
    read(String),
    atom(String).
sinput:-
    sinput_str([]).
sinput_str(Lista):-
    sread_str(String),
    sinput_str([String|List]).
sinput_str(List):-
    append_str(List,[],Result),
    nl,
    display(Result),
    nl.

并最终始终获得此输出:

|-? sinput.
sinput.
hello.
hello.
world.
world.
9.
9.
'.'(hello,'.'(world,[]))

这个号码只是为了让控制台结束要求更多的值,我不知道出了什么问题,提前谢谢你们。

您应该

尝试了解输入数字时会发生什么,迫使sread_str失败。

Prolog探索了所有可用于证明给定目标的替代方案,这样做会更改变量,在路径失败时撤消此类更改。这样的模型由于IO(读取/显示内置)所需的副作用而变得复杂。

然后首先尝试有一个工作sinput_str,像这样

sinput_str([String|List]):-
    sread_str(String),
    sinput_str(List).
sinput_str([]).

最新更新