阅读文件并在swi-prolog上构建事实

时间:2013-05-01 17:01:26

标签: prolog dcg

我需要从有事实描述的文件中读取,例如:

id: GO:0000008
name: thioredoxin

我需要用它构建一个事实,如:"gene(0000008,thioredoxin)."

--- ---加入 嗨,我一直在搜索信息,我发现了DCG条款,显然DCG解决了这个问题,但我没有找到详细的例子。

2 个答案:

答案 0 :(得分:1)

这里有一个样本,使用SWI-Prolog帮助程序库

:- [library(dcg/basics)].

read_fact(Fact) -->
    "id:", blanks, "GO:", string(DIGITS), "\n", "name:", blanks, string(NAME),
    {atom_codes(A_DIGITS, DIGITS),
     atom_codes(A_NAME, NAME),
     Fact =.. [gene, A_DIGITS, A_NAME]
    }.

产量

?- phrase(read_fact(F), "id: GO:0000008\nname: thioredoxin").
F = gene('0000008', thioredoxin) .
正如您所见,DCG可以方便地测试内联字符串,但是从库(pure_input)处理文件phrase_from_file。此外,浏览library(dcg/basics)以了解许多有用的'扫描仪',例如空白// 0或字符串// 1。

答案 1 :(得分:0)

您可以在perl / python / php或类似的地方使用非常小的脚本,将格式更改为您喜欢的格式

例如在perl中

我的($ id)='';

while(<>){

if($ id ne''){

m/name:\s(\w+)$/;

print "gene( id, $1 ).\n";

$id = '';

}

否则{

if( m/id:.*(\d+)/){ $id = $1; }

}

}