List 在Prolog中打印列表元素

List 在Prolog中打印列表元素,list,printing,prolog,List,Printing,Prolog,我有一个列表X,它包含三个元素;ID、名称和等级。所有数据均来自用户输入 read_student_info([A, B, C]), nl, nl, menu([[A, B, C] | X]). read_student_info([A, B, C]) :- write('\tStudent ID: '), read(A), write('\tStudent Name: '), read(B), write('\tStudent Grade: '), read(C).

我有一个列表X,它包含三个元素;ID、名称和等级。所有数据均来自用户输入

read_student_info([A, B, C]),
nl, nl, menu([[A, B, C] | X]).

read_student_info([A, B, C]) :-
  write('\tStudent ID: '),
  read(A),
  write('\tStudent Name: '),
  read(B),
  write('\tStudent Grade: '),
  read(C).
现在,我想显示列表中的元素。如果我有一个学生,他的ID=3,名字=Tom,年级=78。这就是我想打印出来的。我一直在玩弄的当前函数是:

show_records(X) :-
  X = [A | B],
  A = [C | D],
  id = write(C),
  name = format("~s", [B]),
  grade = write(D),
  show_records(B).

然而,我将是第一个承认我几乎不知道自己在做什么的人。任何帮助都将不胜感激

无论如何,我已经弄明白了。这是我的修订本

show_records(X) :-
X = [A | B],
write('\tID = '),
A = [C | D],
write(C),
write('\tName = '),
D = [E | F],
format("~s", [E]),
write('\tGrade = '),
F = [G | H],
write(G),
nl,
show_records(B).

不管怎样,我已经弄明白了。这是我的修订本

show_records(X) :-
X = [A | B],
write('\tID = '),
A = [C | D],
write(C),
write('\tName = '),
D = [E | F],
format("~s", [E]),
write('\tGrade = '),
F = [G | H],
write(G),
nl,
show_records(B).

只是建议一种清理方法:

show_records([]).
show_records([A|B]) :-
  format('ID = ~w\tName = ~w\tGrade = ~w~n',A),
  show_records(B).
测试:


显然,选项卡不是最佳的,但使用起来很简单

只是建议一种清理方法:

show_records([]).
show_records([A|B]) :-
  format('ID = ~w\tName = ~w\tGrade = ~w~n',A),
  show_records(B).
测试:


显然,制表符不是最优的,但使用起来很简单

我建议您只使用一次显式统一=/2:如果您编写X=[[C,E,G | |]| B]而不是X=[A | B],并去掉其他显式统一,那么您的程序的可读性就会大大提高。顺便说一下,如果你的H是[],也就是说子列表只有3个元素,那么你应该写X=[[C,E,G]| B]。我建议你只使用一次显式统一=/2:如果你写X=[[C,E,G |]| B]而不是X=[[C,E,G |]| B]并且去掉其他显式统一,你的程序可读性会更好。顺便说一下,如果你的H是[],也就是说子列表只有3个元素,那么你应该写X=[[C,E,G]| B]。