【发布时间】:2019-03-26 03:47:51
【问题描述】:
我需要将固定格式文本文件的内容读入 Prolog 中的列表 (LL) 列表,但我想从该行的列表中排除每行的第一个和最后一个元素。输入文件的第一行包括行数(LL 中的列表数)和列数(LL 中每个列表的元素数)。 具有 3 行 4 列的示例输入文件是
3 4
A B C D Cd
1 9 3 7 4 7
2 6 8 4 0 32
3 2 4 3 8 42
Ab 140 21 331 41 55
我愿意
LL = [[9,3,7,4],[6,8,4,0],[2,4,3,8]]
如何从 LL 中排除每行的第一个和最后一个元素?
我已尝试阅读 SWI-Prolog 文档并在此处搜索相关主题,但未成功。
readAll( InStream, [W|L] ) :-
readWordNumber( InStream, W ), !,
readAll( InStream, L ).
readAll( InStream, [] ) :-
\+readWordNumber(InStream,_).
lst_2_lst_of_lst([], _N, []).
lst_2_lst_of_lst(L, N, LL) :-
lst_2_lst_of_lst_helper(L, 1, N, LL).
lst_2_lst_of_lst_helper([H|T], N, N, [[H]|LL]):-
lst_2_lst_of_lst(T, N, LL).
lst_2_lst_of_lst_helper([H|T], N1 , N, [[H|TMP]|LL]):-
N2 is N1 + 1,
lst_2_lst_of_lst_helper(T, N2 , N, [TMP| LL]).
调用后
...readAll(F,Input), ...
lst_2_lst_of_lst(Input, C, LL)
(C为4,从F的第一行读入,文本文件)
我现在的结果是这样的
LL = [[1,9 3 7 4 7,2,6 8 4 0 32],[3,2 4 3 8 42,Ab,140 21 331 41]]
我希望它看起来像这样
LL = [[9,3,7,4],[6,8,4,0],[2,4,3,8]]
【问题讨论】:
-
DCG 是你的朋友。或许需要介绍一下。 - Primer
标签: prolog