我需要从有事实描述的文件中读取,例如:
id: GO:0000008
name: thioredoxin
我需要用它建立一个事实,比如:"gene(0000008,thioredoxin)."
---已添加--- 您好,我一直在搜索信息,我找到了 DCG 子句,显然 DCG 解决了问题,但我没有找到详细的示例。
这里是一个示例,使用 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 可以方便地测试内联字符串,但是要处理文件,则可以使用来自 library( pure_input ) 的phrase_from_file。此外,浏览库(dcg/basics)以了解许多有用的“扫描仪”,如空白//0 或字符串//1。
您可以在 perl/python/php 或类似文件中使用非常小的脚本,将格式更改为您喜欢的格式
例如在 perl
我的($id)='';
而(<>){
if($id ''){
m/name:\s(\w+)$/;
print "gene( id, $1 ).\n";
$id = '';
}
别的{
if( m/id:.*(\d+)/){ $id = $1; }
}
}