如何设计一个 ChatGPT 替代方案来识别 Prolog 中算法规范中的模式并将输入映射到输出?
我需要嵌套列表形式的递归模式,其中
[r,"a"]
代表 ["a","a"]
,[r,[1,[r,"b"]]]
代表 [1,"b","b",1,"b","b"]
,变量 'A1'
、'B2'
等用于唯一项和常量值,其中值在规格中重复出现。这种上下文无关语法可用于编写算法、翻译某些语言或解析列表。另外,我需要从这个递归结构到输出递归结构的映射,例如a->b
是映射[1]-[1]
,c
中的[a,c]->[b,c]
是[1,2]->[1,2]
(多维地址系统,其中列号是维度)该术语)。
第一个示例是一个要解析为递归模式的列表。
[2,
[
[[input,[['A',[1,2,3,2,3,1,2,3,2,3]]]],[output,[['B',[3]]]]],
[[input,[['A',[1,2,4,2,4,1,2,4,2,4]]]],[output,[['B',[4]]]]]
]
]
第二个例子是一个解析器,它接受输入并产生输出:
[11,
[
[[input,[['A',[[["aa,]",b,"c",[]],1]]]]],[output,[['B',["aa,]",b]]]]],
[[input,[['A',[[["cc,]",d,"e",[]],1]]]]],[output,[['B',["cc,]",d]]]]]
]
],
这可以与多个规范一起形成变量和常量。
第三个例子是一个解释器(或者是带有附加命令的解释器):
[12,
[
[[input,[['A',[a,is,1,"+",1]]]],[output,[['B',[
[[n,"+"],[1,1,[v,a]]]]]]]],
[[input,[['A',[b,is,3,"+",4]]]],[output,[['B',[
[[n,"+"],[3,4,[v,b]]]]]]]],
[[input,[['A',[a,is,1,"-",1]]]],[output,[['B',[
[[n,"-"],[1,1,[v,a]]]]]]]],
[[input,[['A',[b,is,3,"-",4]]]],[output,[['B',[
[[n,"-"],[3,4,[v,b]]]]]]]]
]
]
答案如下:
2.
[[[r,[1,[r,[2,'C1']]]]],[output,[['C1']]]]
[[[1,2,2,2,2],[[1,1]]]]
这意味着重复模式,然后重复这些模式,并输出变量。
地图意味着
C1
已移动到其输出位置。
11.
[["[","[",'C1','C2','C3',"[","]","]",1,"]"],[output,[['C1','C2']]]]
[[[1,3],[[1,1]]],[[1,4],[[1,2]]],[[1,5],[]]]
该模式包含括号作为字符串,因为否则,它们会与递归语法混淆。
地图将除
C3
之外的每个相关变量移动。
12.
[['C1',is,'C2','C3','C4'],[output,[["[","[",n,'C3',"]","[",'C2','C4',"[",v,'C1',"]","]","]"]]]]
[[[1,1],[[1,11]]],[[1,3],[[1,7]]],[[1,4],[[1,4]]],[[1,5],[[1,8]]]]
此模式将 Prolog 的一种形式转换为 List Prolog。然后代码可以由解释器运行。
地图交换变量的顺序并将其移动到各自的位置。
算法规范,产生这些结果的算法工作起来很有趣,但我自己处理它们更有趣!