2009-10-24 31 views
27

我被搞糊塗了所有內置在聲稱爲防止評價以某種方式Mathematica函數:UnevaluatedDeferHold,超過半打形式Hold*。 Mathematica文檔只是單獨解釋每個函數,而不解釋爲什麼要選擇其中一個。任何人都可以提供所有這些功能的連貫解釋嗎?整件事對我來說似乎是一團糟。將這一切與Lisp宏聯繫起來可能是一個很好的開始。數學:VS未作評估的VS推遲VS保持VS HoldForm VS HoldAllComplete等等等等

大多數Mathematica語言的令人驚訝的是精心設計的,但它似乎是真的鎢自己畫成在這方面的一個角落裏。或者我可能會錯過一些東西。

回答

11

這些都是非常棘手的結構,很難給出明確的解釋;它們並不像Lisp宏那麼簡單(或者就此而言,Lisp的QUOTEEVAL之間的關係)。然而,在Wolfram的網站上有notes from Robby Villegas's 1999 talk "Unevaluated Expressions"的一個很好的,冗長的討論。

Defer是從談話中省略,因爲它是新的數學6.0。這很像HoldForm,除了當它在前端輸出(但不是裸內核)時,它會被剝離,留下一個可用作輸入的表達式。如果要以編程方式構建用戶可以編輯和評估的表達式,在調色板中說明,這非常有用。