簡體   English   中英

弱頭正常形式和正常形式

[英]Weak head normal form and normal form

我對弱頭正常形態和正常形態有疑問。

弱頭范式意味着,表達式只會在達到數據構造函數所需的范圍內求值。

范式表示表達式將被完全求值。

現在,我有以下表達:

\x -> x * 10

為什么上面的表達式是正常形式?

"Papu" ++ "chon"

為什么以上表達既不在WHNF中,又不在NF中?

WHNF進行評估的程度足以達到數據構造函數或lambda函數

如果您有未使用參數調用的lambda函數,則無論如何都無法對其進行評估。 因此,lambda函數存在於WHNF中,實際上在NF中,因為沒有進一步評估的方法。 現在,如果您使用參數調用 lambda函數,我們可以評估結果可能是什么。 但是lambda函數本身嗎? 沒什么可做的了。

您的第一個表達式是不帶參數的lambda函數。 因此它是正常形式的。

您的第二個表達式既不是數據構造函數也不是lambda,因此不是任何正常形式。 現在,如果您對它進行一步評估,您將獲得

'P' : ("apu" ++ "chon")

其中(雖然語法看起來並不像它)與數據構造開始(即(:) ),因此 WHNF,但不是 NF(因為它仍包含未計算(++)子表達式)。

如果我們擺脫了infix語法,也許會更容易:

(++) "Papu" "chon"

(:) 'P' ( (++) "apu" "chon" )
 \\x -> x * 10 

為什么上面的表達式是正常形式?

因為,您無法簡化它。


 "Papu" ++ "chon" 

為什么以上表達既不在WHNF中,又不在NF中?

首先,如果NF中有某些表達-這意味着它在WHNF中。 NF是WHNF的受限版本。

因此,我們可以調整您的問題。 為什么上面的表達式不在WHNF中?

簡單的答案是:我們可以將其簡化為"Papuchon"


如果您想了解WHNF和NF之間的區別,可以閱讀this

暫無
暫無

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

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