String 列表序言中列表解释器的字符串卡在2项上
我编写了一种名为List Prolog的编程语言(在这种语言中,谓词以String 列表序言中列表解释器的字符串卡在2项上,string,list,prolog,interpreter,String,List,Prolog,Interpreter,我编写了一种名为List Prolog的编程语言(在这种语言中,谓词以[n,predicate\u name]开头,变量是[v,variable\u name]),但在获取一些代码时遇到了困难(一种带有definite子句语法的算法,它获取一个字符串并将其转换为Prolog术语,或者列表,等等)使用n,而不是每个列表(在字符串中)2个项目的查询 另外,List Prolog与Prolog不同,因为它包含的语法要求用户编写自己的基本情况,类似于用C编写的解释器,即 [[n,co
[n,predicate\u name]
开头,变量是[v,variable\u name]
),但在获取一些代码时遇到了困难(一种带有definite子句语法的算法,它获取一个字符串并将其转换为Prolog术语,或者列表,等等)使用n,而不是每个列表(在字符串中)2个项目的查询
另外,List Prolog与Prolog不同,因为它包含的语法要求用户编写自己的基本情况,类似于用C编写的解释器,即
[[n,compound213],["","",[v,t],[v,t]]],
[[n,compound213],[[v,u],[v,u],[v,t],[v,t]]],
在查询中,[[n,grammar1],“[[\'aa\',b],1],[v,t]]]
起作用,即只有两个项目,即可以转换为字符串的一部分的[\'aa\',b]
,但不能超过这个数字,即[\'aa\',b,\'c\',[]
,因此[[n,grammar1],“[[\'aa\',b,'c\',[]v]/code>不起作用
注意:该算法旨在获取一个字符串,如“[\“a\”,b,3]”
,并返回一个术语,即[“a”,b,3]
,其中包含字符串、原子、数字、空列表和更多这些元素的列表
% The query:
test(15,[[n,grammar1],["[[\"aa\",b,\"c\",[]],1]",[v,t]]],
% The code:
[
[[n,grammar1],[[v,u],[v,t]],":-",
[
[[n,compound],[[v,u],"",[],[v,t]]]
]
],
[[n,compound213],["","",[v,t],[v,t]]],
[[n,compound213],[[v,u],[v,u],[v,t],[v,t]]],
[[n,compound],[[v,t],[v,u]],"->",
["[","]",
[[n,compound213],[[v,t],[v,u]]]]],
[[n,compound],[[v,t],[v,u]],"->",
["[",[[n,compound21],[[v,t],[v,v]]],"]",
[[n,compound213],[[v,v],[v,u]]]]],
[[n,compound212],["","",[v,t],[v,t]]],
[[n,compound212],[[v,u],[v,u],[v,t],[v,t]]],
[[n,compound21],[[v,t],[v,u]],"->",
[[[n,item],[[v,i]]],
% [[n,lookahead],["]"]],
[[n,code],[[n,wrap],[[v,i],[v,itemname1]]],
[[n,append],[[v,t],[v,itemname1],[v,v]]]],
[[n,compound212],[[v,v],[v,u]]]]],
[[n,compound21],[[v,t],[v,u]],"->",
[[[n,item],[[v,i]]],",",
%[[n,code],[[n,trace]]],
[[n,compound21],[[],[v,compound1name]]],
[[n,code],[[n,wrap],[[v,i],[v,itemname1]]],
[[n,append],[[v,t],[v,itemname1],[v,v]]],
[[n,append],[[v,v],[v,compound1name],[v,u]]]]]],
[[n,item],[[v,t]],"->",["\"",[[n,word21],["",[v,t]]],
"\""]],
[[n,item],[[v,t]],"->",
[[[n,number21],["",[v,u]]],[[n,code],
[[n,stringtonumber],[[v,u],[v,t]]]]]],
[[n,item],[[v,t]],"->",[[[n,word21_atom],["",[v,t1]]],
[[n,code],[[n,atom_string],[[v,t],[v,t1]]]]]], % atoms
[[n,item],[[v,t]],"->",[[[n,compound],[[],[v,t]]]]],
[[n,number212],["","",[v,t],[v,t]]],
[[n,number212],[[v,u],[v,u],[v,t],[v,t]]],
[[n,number21],[[v,t],[v,u]],"->",
[[v,a],[[n,commaorrightbracketnext]],
[[n,code],[[n,stringtonumber],[[v,a],[v,a1]]],
[[n,number],[[v,a1]]],
[[n,stringconcat],[[v,t],[v,a],[v,v]]]],
[[n,number212],[[v,v],[v,u]]]]],
[[n,number21],[[v,t],[v,u]],"->",
[[v,a],
[[n,code],[[n,stringtonumber],[[v,a],[v,a1]]],
[[n,number],[[v,a1]]],
[[n,stringconcat],[[v,t],[v,a],[v,v]]]],
[[n,number21],["",[v,numberstring]]],
[[n,code],[[n,stringconcat],
[[v,v],[v,numberstring],[v,u]]]]]],
[[n,word212],["","",[v,t],[v,t]]],
[[n,word212],[[v,u],[v,u],[v,t],[v,t]]],
[[n,word21],[[v,t],[v,u]],"->",
[[v,a],[[n,quote_next]],
[[n,code],
[[n,not],[[[n,=],[[v,a],"\""]]]],
[[n,stringconcat],[[v,t],[v,a],[v,v]]]],
[[n,word212],[[v,v],[v,u]]]]],
[[n,word21],[[v,t],[v,u]],"->",
[[v,a],
[[n,code],
[[n,not],[[[n,=],[[v,a],"\""]]]],
[[n,stringconcat],[[v,t],[v,a],[v,v]]]],
[[n,word21],["",[v,wordstring]]],
[[n,code],
[[n,stringconcat],[[v,v],[v,wordstring],[v,u]]]]]],
[[n,word212_atom],["","",[v,t],[v,t]]],
[[n,word212_atom],[[v,u],[v,u],[v,t],[v,t]]],
[[n,word21_atom],[[v,t],[v,u]],"->",
[[v,a],[[n,commaorrightbracketnext]],
[[n,code],
[[n,not],[[[n,=],[[v,a],"\""]]]],
[[n,not],[[[n,=],[[v,a],"["]]]],
[[n,not],[[[n,=],[[v,a],"]"]]]],
[[n,stringconcat],[[v,t],[v,a],[v,v]]]],
[[n,word212_atom],[[v,v],[v,u]]]]],
[[n,word21_atom],[[v,t],[v,u]],"->",
[[v,a],
[[n,code],
[[n,not],[[[n,=],[[v,a],"\""]]]],
[[n,not],[[[n,=],[[v,a],"["]]]],
[[n,not],[[[n,=],[[v,a],"]"]]]],
[[n,stringconcat],[[v,t],[v,a],[v,v]]]],
[[n,word21_atom],["",[v,wordstring]]],
[[n,code],
[[n,stringconcat],[[v,v],[v,wordstring],[v,u]]]]]],
[[n,commaorrightbracketnext],"->",
[[[n,lookahead],[","]]]],
[[n,commaorrightbracketnext],"->",
[[[n,lookahead],["]"]]]],
[[n,quote_next],"->",
[[[n,lookahead],["\""]]]],
[[n,lookahead],[[v,a],[v,a],[v,b]],":-",
[[[n,stringconcat],[[v,b],[v,d],[v,a]]]]]
],
% The desired result:
[[[[v,t],[["aa",b,"c",[]],1]]]]).
我通过取消对行的注释修复了代码:
[[n,lookahead],["]"]],
在取消注释该行以打开调试之后
[[n,code],[[n,trace]]],
这表明在没有lookahead语句检查下一个字符是否为“]”的情况下,代码错误地在2个以上项目之后跟随它所在的子句,失败了,而使用lookahead语句,它所在的子句只在n个项目列表的末尾成功了