簡體   English   中英

Lambda 表達式的替換函數

[英]Substitution function for Lambda expression

我目前正在編寫該函數,但無法解決第 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 表達式而不是 String。

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

嗯,定義只是重寫

(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)

然后我們使LExpr之間的句法應用明確。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM