从标准输入中读取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 ......
这种平凡的任务有一个简单的方法吗?也许某些标准谓词我在某种程度上被忽视了?
答案 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), 做同样的事情,但更快。这些谓词不是 记录。