我的列表如下:
[ [005,Chester,100], [001,Bob,99], [002,Andy,77] ... ]
每个子列表的前2个元素(ID和名称)是字符串(用单引号输入)
我正在尝试创建一个允许用户输入字符串的函数,然后在每个子列表的ID和Name字段中搜索输入的字符串。
因此,如果我输入'Chester',程序将在每个子列表的ID和Name字段中检查'Chester'。如果找到,程序将通知用户并删除子列表。如果没有找到,“写('未找到。')”示例:
Student: Chester removed
[ [001,Bob,99],[002,Andy,77] ... ]
我知道删除谓词,可以让它与平面列表一起使用,但是子列表列表给了我各种各样的问题。感谢
编辑:
到目前为止我已经得到了(感谢CapelliC)
process(8, X) :-
nl,
write('\tEnter student to delete: '),nl,nl,
read_delete_info(A),
select( [A,_,_] , X, Z),
write(Z),
nl, nl, menu(Z).
read_delete_info(A) :-
write('\tStudent ID: '),
read(A).
这将正确删除子列表,显示新列表并将新列表传递回菜单。
是否可以编辑select / 3以便如果没有匹配则会写入“No match”?或者如果匹配,它会显示匹配是什么以及返回新列表?感谢
答案 0 :(得分:1)
您可以使用' if / then / else',或多或少以这种方式
...
( select([A,_,_], X, Z)
-> write(Z),
etc..
; writeln('No Match')
),
...
另外,因为在第一篇文章中你愿意匹配ID或Name,你可以用这种方式组合测试
...
( ( select([A,_,_], X, Z) ; select([_,A,_], X, Z) )
-> write(Z),
etc..
; writeln('No Match')
),
...