首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机序列dcg分析

随机序列dcg分析
EN

Stack Overflow用户
提问于 2020-04-12 09:15:39
回答 1查看 97关注 0票数 1

我有一些文本文件,我想要解析,但顺序的例子停止和启动可能是不同的。停止可能出现在前面或最后,这是一个虚拟的例子,因为有多个变量,如停止,开始.

Exemple1.txt

站:1

开始阶段:2

exemple2.txt

start: 9

停止:4

我知道如何解析开始和停止,当开始是第一次,停止是第二次,然而,当这些是随机的顺序时,我将如何做到这一点。

代码语言:javascript
复制
parseStart(D) --> "start: " , integer(D).
parseStop(D) --> "stop: " , integer(D).

我从stdin收到要解析的文件,所以我收到了。

read_string解析1行,将其转换为char和do短语(parseStart(Startint),line1),但是对于第2行,我必须知道我不知道的顺序。

也许我可以做点什么

代码语言:javascript
复制
parseBoth(StartInt,StopInt) --> parseStart(startInt) <|> parseStop(StopInt) 

做两次然后检查两者是否是统一的?然而,这似乎是一个黑客,我想知道是否有更好的方法来做到这一点?

编辑:停止,开始只是许多例子之一,我有许多dcg表达式是随机的,我将如何做到这一点,因为尝试每一个顺序将意味着我必须写6!6种可能的停止,开始,结束,时间的谓词..。表达

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-12 09:31:28

也许是这样:

代码语言:javascript
复制
parse(start(Start), stop(Stop)) -->
    first(Token),
    rest(Token, Start, Stop).

first(start) --> "start: ".
first(stop)  --> "stop: ".

rest(start, Start, Stop) -->
    integer(Start), stop(Stop).
rest(stop, Start, Stop) -->
    integer(Stop), start(Start).

start(Start) --> "start: " , integer(Start).
stop(Stop)   --> "stop: " , integer(Stop).

在问题编辑后更新

如果文本文件的所有行都具有“关键字:整型”的格式,则可以使用:

代码语言:javascript
复制
parse_pairs([]) -->
    eos.
parse_pairs([Pair| Pairs]) -->
    parse_pair(Pair),
    parse_pairs(Pairs).

parse_pair(Key-Value) -->
    string(String), ": ", integer(Value), blanks,
    {atom_string(Key, String)}.

样例呼叫:

代码语言:javascript
复制
?- phrase(parse_pairs(Pairs), "start: 1\nstop: 2").
Pairs = [start-1, stop-2] .
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61169201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档