簡體   English   中英

誰能解釋ZF表達式的第二條歸約規則?

[英]Can anyone explain the second reduction rule for ZF-expressions?

[ e | v <- f:fs, q ] [ e | v <- f:fs, q ]減少為[ e | q ] [ v := f ] ++ [ e | v <- fs, q ] [ e | q ] [ v := f ] ++ [ e | v <- fs, q ]

[ e | v <- f:fs, q ]的輸出 [ e | v <- f:fs, q ]應該是一個列表。 將兩個列表放在一起表示什么意思? 我的意思是您不能像這樣["a"]["b"]僅僅將兩個列表放在一起。

另外,符號:=是否等於=

不知道您在哪里看到過它,很難確定是什么意思。 [e | q][v := f] [e | q][v := f]無效 Haskell代碼(除了一些創造性地使用語言擴展的)。

可能意味着更像

[e' | q'] ++ [e | v <- fs, q]

其中e'e ,其中v所有實例v f替換,而q'qv所有實例v f替換

因此,例如,如果f為5,則ev*2qodd v

[v*2 | v <- 5:fs, odd v]

這將減少到

[5*2|odd 5] ++ [v*2 | v <- fs, odd v]

由於odd 5減少為True我們最終得到

[5*2] ++ [v*2 | f<- fs, odd v]

您提到的符號不是Haskell代碼,而是用於替換的元符號,該符號在編程語言理論中經常使用。

如果et是Haskell表達式,並且x是Haskell變量,我們將e [x := t]表示為表達式e ,其中x所有自由出現都已被t替換(並避免捕獲)。 例如

x [x := t]                       ===> t
x+3 [x := t]                     ===> t+3
f x + (\x -> x + 32) x [x := t]  ===> f t + (\x -> x + 32) t
[ f x y | y <- [1..x] ] [x := t] ===> [ f t y | y <- [1..t] ]

同樣,這不是Haskell運算符,而是“數學”元級別的運算符,該運算符將Haskell代碼(語法)作為輸入,並生成Haskell代碼(語法)作為輸出。

通常利用它來定義lambda的beta減少:

(\x -> e) t ---beta---> e [x := t]

無論如何,在發布的表達式中

[ e | q ] [ v := f ] ++ [ e | v <- fs, q ]

[...]最后是Haskell的列表內涵,而[v := f]是元的符號,用於替換。 例如,這是一個經過全面評估的示例

[ f x y | x <- 1:2:[] , y <- [0..x] ]
===> definition of list comprehension
[ f x y | y <- [0..x] ] [x := 1] ++ [ f x y | x <- 2:[] , y <- [0..x] ]
===> substitution
[ f 1 y | y <- [0..1] ] ++ [ f x y | x <- 2:[] , y <- [0..x] ]
===> definition of list comprehension
[ f 1 y | y <- [0..1] ] 
      ++ [ f x y | y <- [0..x] ] [x := 2] 
      ++ [ f x y | x <- [] , y <- [0..x] ]
===> substitution
[ f 1 y | y <- [0..1] ] ++ [ f 2 y | y <- [0..2] ] ++ [ f x y | x <- [] , y <- [0..x] ]
===> definition of list comprehension
[ f 1 y | y <- [0..1] ] ++ [ f 2 y | y <- [0..2] ] ++ []
===> many other steps here
[ f 1 0, f 1 1 ] ++ [ f 2 0, f 2 1, f 2 2 ] ++ []
===> concatenation
[ f 1 0, f 1 1, f 2 0, f 2 1, f 2 2 ]

暫無
暫無

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

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