簡體   English   中英

Haskell 中的 Beta 減少策略

[英]beta reduction strategies in Haskell

這是我第一次學習函數式編程。 我確實理解簡單的 beta 減少是如何工作的。

例如:

(\x->2*x)5

意味着您將 xs 替換為 5。

2*5=10

然而,其他例子讓我感到困惑

(\f->f(f 0))(\x->x+1)

我們已經了解了一些評估策略,頭范式和弱頭范式。

從我的筆記中,我明白頭部范式意味着沒有 redex 表達式,而弱頭部范式意味着存在 lambda 抽象。

這對我來說沒有任何意義。 兩者之一是否適用於最后一個示例? 如果是這樣,其他策略的例子是什么?

期限

(\f -> f (f 0)) (\x -> x+1)

既不是頭部范式也不是弱頭部范式。 這個術語是一個 lambda(特別是\\f -> f (f 0) )到一個術語(特別是\\x -> x+1 )的應用,所以:

  1. 有一個還原。 回想一下,redex 被定義為將 lambda 應用於一個術語。 由於表達式中的某處有一個 redex——特別是在最頂層,在這種情況下——這不是正常形式。
  2. 該術語的頂級是應用程序,而不是 lambda,因此這不是弱頭范式。

“頭范式”和“弱頭范式”都不是評估策略。 形式是描述術語的形容詞; 評估策略通常是描述如何將一個術語變為另一個術語的動詞。

暫無
暫無

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

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