【问题标题】:Substitution function for Lambda expressionLambda 表达式的替换函数
【发布时间】:2015-06-27 18:45:14
【问题描述】:

我目前正在编写函数,但无法解决第 4 种情况,即:

(E1 E2)[v->E] = E1[v->E] E2[v -> E]

我已经定义了前 3 个(用于常量和变量),但这对我来说有点太棘手了。

但是,函数签名是:

sub :: LExpr -> String -> LExpr -> LExpr 

首先我很困惑如何表示参数(E1 E2),然后如何表示E1[v->E] E2[v -> E]-part。我认为++ 在这里不起作用,因为结果必须是 lambda 表达式而不是字符串。

data LExpr 的定义是 Haskell 的“通用”定义,使用 EqShow。如果需要,我可以提供,但它非常基础,您必须非常熟悉它。

【问题讨论】:

  • 请不要犹豫,向我们展示您的代码

标签: function haskell lambda substitution


【解决方案1】:

好吧,定义只是对

的重写
(E1 E2)[v->E] = E1[v->E] E2[v -> E]

进入 Haskell 语法。首先我们使用sub 代替[v -> E] 表示法。

sub (E1 E2) v E = (sub E1 v E) (sub E2 v E)

然后我们显式地在LExprs 之间进行句法应用。

sub (App E1 E2) v E = App (sub E1 v E) (sub E2 v E)

最后,我们为变量使用小写的名字,因为 Haskell 为构造函数保留了大写的名字。

sub (App e1 e2) v e = App (sub e1 v e) (sub e2 v e)

【讨论】:

  • 当然我一定用过应用程序...谢谢!!
猜你喜欢
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多