小编Evi*_*lob的帖子

Haskell - 将De Bruijn术语转换为Lambda术语(反之亦然)

我有一个编写Haskell程序的任务,该程序能够将De Bruijn术语转换为Lambda术语,并将Lambda术语转换为De Bruijn术语,并检查术语是否"关闭".

我不是在寻找某人为我做这项任务,但我们将非常感谢您的帮助!我对如何开始这个问题基本上一无所知.

所以,我最大的问题是:De Bruijn术语和Lambda术语之间的区别是什么?我理解变量"闭合"意味着什么,但我怎样才能在Haskell中检查它?

您可以想到的任何其他帮助将不胜感激.

这是完整的任务:

(通常)lambda术语定义为数据类型:

data Term = Var Int | Lam Int Term | App Term Term deriving (Eq, Show, Read)
Run Code Online (Sandbox Code Playgroud)

变量表示为整数.一个术语被称为关闭,如果每个iVar i都有Lam i <subterm>从它到根的路径上的from 一个术语,为它提供一个绑定.

De Bruijn术语被定义为数据类型:

data BTerm =BVar Int | BLam BTerm | BApp BTerm BTerm deriving (Eq,  Show, Read)
Run Code Online (Sandbox Code Playgroud)

编写一个Haskell函数db2lam,将de Bruijn项转换为lambda项.编写一个Haskell函数lam2db,将lambda项转换为Bruijn项.

编写一个isClosed测试lambda术语是否关闭的函数.编写一个函数isClosed来测试de Bruijn项是否已关闭.

选择以下两个科目之一:

a)为de Bruijn术语实现正常的顺序beta减少b)对(通常的)lambda术语实施正常的顺序beta减少

非常感谢您的帮助(大或小)!我正处于学习Haskell的早期阶段,很抱歉这么不确定!这个任务在这个时候是我的头脑.

lambda haskell

1
推荐指数
1
解决办法
1278
查看次数

标签 统计

haskell ×1

lambda ×1