从B-Prolog的stdio中读取数字

时间:2013-01-19 07:27:51

标签: prolog b-prolog

从标准输入中读取B-Prolog中的数字或几个以空格分隔的数字(不是后跟句点)的最简单方法是什么?

例如,对于ECliPse,我编写了这些简单的谓词(我不需要错误处理):

read_number(N) :-
    read_token(Token, _),
    (
        Token == - 
    ->
        read_token(Nabs, _),
        N is -1 * Nabs
    ;
        N is Token
    ).

read_numbers_list(Ns) :-
    read_string(end_of_line, _, String),
    split_string(String, " ", "", Ss),
    ( foreach(S, Ss), foreach(N, Ns) do
        number_string(N, S) ).

但为B-Prolog写这样的东西对我来说看起来过于复杂 - 没有read_token或split_string ......

这种平凡的任务有一个简单的方法吗?也许某些标准谓词我在某种程度上被忽视了?

1 个答案:

答案 0 :(得分:0)

我最终只是在Prolog之外预处理输入,然后使用read/1

此外,来自B-Prolog创作者Neng-Fa Zhou(https://groups.google.com/forum/?fromgroups#!topic/comp.lang.prolog/KSXc2QTWZck)的信息:

  

你可以使用一个名为read_next_token(Type,Val)的内部谓词,   为了你的目的。另一个谓词,名为b_NEXT_TOKEN_ff(Type,Val),   做同样的事情,但更快。这些谓词不是   记录。