【发布时间】:2021-08-02 08:27:30
【问题描述】:
我正在尝试使用 prolog 生成一些乳胶代码。我正在生成通过边缘与它们所属的世界连接的节点。我的代码是这样的:
print_valutations(Stream,Number_of_nodes,[Head|Tail]):-
Number_of_nodes1 is Number_of_nodes+1,
single_valutation(Stream,Number_of_nodes1,Head),
print_valutations(Stream,Number_of_nodes1,Tail).
print_valutations(_,_,_):- !.
single_valutation(Stream,Number_of_nodes,[Head|Tail]):-
write(Stream, "\\node[circle, minimum size=6mm, draw]"),
write(Stream, "[left of= 10mm]"),
write(Stream, "[below of= "),
Number_of_nodes1 is Number_of_nodes-1,
write(Stream,Number_of_nodes1),
write(Stream,"]("),
write(Stream, Number_of_nodes),
write(Stream,"){"),
write(Stream,Head),
writeln(Stream,"};"),
val(Stream,Number_of_nodes,Tail).
single_valutation(_,_,_):- !.
val(Stream,Node,[Head|Tail]):-
display_val(Stream,Node,Head),
val(Stream,Node,Tail).
val(_,_,_):- !.
display_val(Stream,[]) :-
write(Stream,"").
display_val(Stream,Node,[Head|Tail]) :-
write(Stream,"\\draw[->] ("),
write(Stream,Node),
write(Stream,") to ("),
write(Stream,Head),
writeln(Stream,");"),
display_val(Stream,Node,Tail).
prova(FileName):-
open(FileName, write, Stream),
print_valutations(Stream, 100,[[a,[4]],[b,[3]],[c,[1]]]),
close(Stream).
并且这段代码会生成如下的txt文件:
\node[circle, minimum size=6mm, draw][left of= 10mm][below of= 100](101){a};
\draw[->] (101) to (4);
\node[circle, minimum size=6mm, draw][left of= 10mm][below of= 101](102){b};
\draw[->] (102) to (3);
\node[circle, minimum size=6mm, draw][left of= 10mm][below of= 102](103){c};
\draw[->] (103) to (1);
我想要的是这个(仅在第一行留下 = 10mm 的左侧):
\node[circle, minimum size=6mm, draw][left of= 10mm][below of= 100](101){a};
\draw[->] (101) to (4);
\node[circle, minimum size=6mm, draw][below of= 101](102){b};
\draw[->] (102) to (3);
\node[circle, minimum size=6mm, draw][below of= 102](103){c};
\draw[->] (103) to (1);
我该怎么做?
【问题讨论】:
-
DCG 将提供更简单、清晰、优雅的解决方案。
标签: list prolog nested-lists