我有一个编写Haskell程序的任务,该程序能够将De Bruijn术语转换为Lambda术语,并将Lambda术语转换为De Bruijn术语,并检查术语是否"关闭".
我不是在寻找某人为我做这项任务,但我们将非常感谢您的帮助!我对如何开始这个问题基本上一无所知.
所以,我最大的问题是:De Bruijn术语和Lambda术语之间的区别是什么?我理解变量"闭合"意味着什么,但我怎样才能在Haskell中检查它?
您可以想到的任何其他帮助将不胜感激.
这是完整的任务:
(通常)lambda术语定义为数据类型:
Run Code Online (Sandbox Code Playgroud)data Term = Var Int | Lam Int Term | App Term Term deriving (Eq, Show, Read)变量表示为整数.一个术语被称为关闭,如果每个
i人Var i都有Lam i <subterm>从它到根的路径上的from 一个术语,为它提供一个绑定.De Bruijn术语被定义为数据类型:
Run Code Online (Sandbox Code Playgroud)data BTerm =BVar Int | BLam BTerm | BApp BTerm BTerm deriving (Eq, Show, Read)编写一个Haskell函数
db2lam,将de Bruijn项转换为lambda项.编写一个Haskell函数lam2db,将lambda项转换为Bruijn项.编写一个
isClosed测试lambda术语是否关闭的函数.编写一个函数isClosed来测试de Bruijn项是否已关闭.选择以下两个科目之一:
a)为de Bruijn术语实现正常的顺序beta减少b)对(通常的)lambda术语实施正常的顺序beta减少
非常感谢您的帮助(大或小)!我正处于学习Haskell的早期阶段,很抱歉这么不确定!这个任务在这个时候是我的头脑.