【发布时间】:2013-05-24 15:19:45
【问题描述】:
我知道我可以在 Prolog shell 中使用变量(我想有点像使用“$”字符……但我不记得了……)
如果我执行以下查询,它似乎工作正常:
?- leggiFile('dataggare.txt', ListaTesto), tokenizzaLista(ListaTesto, TokenizedList, 1).
ListaTesto = [68, 117, 114, 97, 110, 116, 101, 32, 105|...],
TokenizedList = [t(1, [68, 117, 114, 97, 110, 116, 101]), t(-1, [32]), t(2, [105, 108]), t(-1, [32]), t(3, [77, 101, 100|...]), t(-1, [44]), t(-1, [32]), t(4, [...|...]), t(..., ...)|...]
但是如果我尝试分别执行 leggiFile/2 和 tokenizzaLista/2 这两个查询,这样会出错:
?- leggiFile('dataggare.txt', ListaTesto).
ListaTesto = [68, 117, 114, 97, 110, 116, 101, 32, 105|...].
?- tokenizzaLista($ListaTesto, TokenizedList, 1).
ERROR: variable `ListaTesto' does not exist
为什么?在我看来很奇怪。我错过了什么?
【问题讨论】:
-
如果 tokenizzaLista 是基于 DCG 的,你可以使用 phrase_from_file
-
不,这不是基于 DCG 的
-
$不保证始终有效。它旨在作为一种快速破解(针对用户)。正确的方法是简单地将asserta以您选择的函子名称放入数据库中:例如asserta( sym(Name,Val) )然后sym(Name,Val)进行检索。
标签: prolog swi-prolog declarative prolog-toplevel