Prolog:从文件中读取子列表列表,同时保持每个子列表的元素作为其原始类型

时间:2014-04-14 03:20:24

标签: prolog

所以我有一个程序可以将大量的子列表保存到文件中。每个子列表都有ID,名称和等级。 ID和名称存储为单引号字符串。示例(当我保存文件时,引号被删除,基础列表存储为:

 [ [005,Chester,100], [001,Bob,99], [002,Andy,77] ... ]

我将此保存到文件的功能看起来像(X是子列表列表):

% ----- OPTION 2, STORE TO FILE
process(2, X) :-
  open('hogwarts.txt',write,Stream),
  write(Stream,X), write(Stream, '.'),
  close(Stream),
  nl, nl, menu(X).

我加载保存文件的功能如下:

% ----- OPTION 1, LOAD FROM FILE
process(1, X) :-
  open('hogwarts.txt',read,Str),
  read(Str,TOHERE),
  close(Str),
  write(TOHERE), nl, menu(TOHERE).

当我在加载保存的文件后写(TOHERE)时,我得到的内容如下:

[[2, _G316, 67], [1, _G328, 100]]

从保存的文件加载列表后,是否可以将子列表的元素保持为正确的类型? (将ID和名称字段保留为单引号字符串,并将等级作为数字) 感谢。

2 个答案:

答案 0 :(得分:2)

你可以编辑文件吗?

然后我会建议:'Chester''Bob'。如果你将它们放入',那么它们就是条款。否则它们是自由变量。

答案 1 :(得分:2)

我建议在谓词中使用writeq

process(2, X) :-
  open('hogwarts.txt',write,Stream),
  writeq(Stream,X), write(Stream, '.'),
  close(Stream),
  nl, nl, menu(X).

这将保持原子中的引用,这是你需要的。