在Prolog的旅途中,现在我陷入了i/o部分.我试图读取一个以特定格式编写的文件,并用它们创建我的事实并使用这些事实.但是在阅读了stackoverflow中的几个库和示例之后,我无法找到答案.例如,这是我的文件.
a,b,c,d,e
funct(a,[1,2,3,4,5])
funct(b,[2,4,6,8,10]
funct(c,[1,3,5,7,9])
funct(d,[1,1,2,3,5])
funct(e,[3,7,11,19,23])
Run Code Online (Sandbox Code Playgroud)
funct/2具有列在第一行中的每个元素的列表.我试图在开始时获得第一行然后使用它,但我无法做到这一点.我认为这是正确的方法,虽然在尝试Prolog之后我现在不能对自己这么肯定.我想要做的是这样的:
functExp(a,a,1)
functExp(a,b,2)
functExp(a,c,3)
functExp(a,d,4)
functExp(a,e,5)
functExp(a,b,1)
functExp(b,a,2)
functExp(b,b,4)
functExp(b,c,6)...
Run Code Online (Sandbox Code Playgroud)
我正在使用SWI-Prolog btw.
编辑:对不起,很抱歉.我不知道尝试使用"功能"是错误的.我纠正了我的期望.functExp/3是我想要得到的输出,它与funct的不同.我想我应该使用assert/assertz内置函数,但我仍然不确定我应该做什么.我很抱歉我的误解.我猜你还是个新手,所以如果你和我一起熊,我将不胜感激.
SWI-Prolog有很多内置的IO,结合它们我们可以轻松读取你的文件数据:
process_file :-
open('input.txt', read, S),
read_line_to_codes(S, Fs),
atom_codes(Fa, Fs),
atomic_list_concat(Elems, ',', Fa),
repeat,
read_line_to_codes(S, L),
read_from_codes(L, T),
( T == end_of_file -> close(S)
; apply_line(T, Elems), fail
).
apply_line(T, Es) :-
T =.. [F,K,As],
maplist(out_line(F, K), Es, As).
out_line(F, K, E, A) :-
T =.. [F, K, E, A],
writeln(T).
Run Code Online (Sandbox Code Playgroud)
input.txt当然包含您显示的数据
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |