1

从标准输入中读取 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 ......

这种平凡的任务有简单的方法吗?也许我忽略了一些标准谓词?

4

1 回答 1

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),做同样的事情,但速度更快。这些谓词没有记录。

于 2013-01-20T19:56:36.080 回答