回答
($!)
是嚴格的功能應用。也就是說,它在評估函數之前評估參數。
這與在Haskell,例如正常懶惰函數應用f x
或f $ x
,它首先開始評估函數f
,並且只在需要時計算參數x
。
例如succ (1 + 2)
將通過創建thunk來延遲添加1 + 2
,並開始首先評估succ
。只有當需要succ的參數時,纔會評估1 + 2
。
但是,如果您確定始終需要函數的參數,則可以使用($!)
,它將首先評估參數爲弱頭標準形式,然後輸入該函數。這樣,你不會創建一大堆thunk,這可以更有效率。在此示例中,succ $! 1 + 2
將首先計算3
,然後輸入函數succ
。
注意,它並不總是安全的,只需更換嚴格的功能應用的正常功能應用。例如:
ghci> const 1 (error "noo!")
1
ghci> const 1 $! (error "noo!")
*** Exception: noo!
最後一個例子更多關於'error'的副作用。功能語義永遠不應該受到劉海的傷害(「par」和「seq」相同)。放置劉海有時可能會增加速度/記憶力,有時會減少。在某些特殊情況下,它可能會導致永無止境的計算'const 1 $! (最後[1 ..])'。 – ony 2010-05-09 12:47:11
那麼,信息的印刷是一個副作用,但重點是'錯誤'是⊥(底部)。就像一個永無止境的計算是⊥。如果你使用'seq'來評估⊥,你的程序的語義會改變。這就是爲什麼你應該小心諸如'seq'和'($!)',它可以增加(或減少)你程序的效率,但它也可能使它崩潰在通常不應該有的地方。 – 2010-05-09 19:19:16
啊,愚蠢的我!它在zvon上也是如此描述'$!',但由於某種原因,等號不會響起... 感謝您的博客鏈接。 – 2010-05-07 10:07:37
'f $! x = x''seq'' f x' http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/Prelude。html#%24%21 – 2011-08-03 21:02:54
儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17886026) – guradio 2017-11-09 07:29:16
- 1. swift中的問號和感嘆號有什麼區別?
- 2. 美元符號和美元符號之間的區別是什麼,然後是JQuery中的一段時間?
- 3. Haskell中美元符號($)和括號之間的區別是什麼?
- 4. 什麼是Asterisk和感嘆號准許的意義美國
- 5. [undefined]和[,]之間的區別是什麼?
- 6. 什麼是「&!」在Linux的shell(符號和感嘆號)意思
- 7. ++和:haskell之間的區別是什麼?
- 8. $(())和expr之間的區別是什麼?
- 9. $(...)和`...`之間的區別是什麼
- 10. 感嘆號操作符?
- 11. cmd和感嘆號
- 12. 雙感嘆號?
- 13. 冒號「:」和胖箭頭「>」之間的區別是什麼?
- 14. 的感嘆號
- 15. 區別:%% a和%variable%變量之間的區別是什麼?
- 16. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 17. 感嘆SRC之前做些什麼 - HTML
- 18. MVC和MVVM之間的區別和相似之處是什麼?
- 19. 什麼使反引號和撇號之間有很大區別?
- 20. 感嘆號在VB.NET
- 21. @observable和@published之間有什麼區別
- 22. TVF/UDF之間的區別是什麼
- 23. {0}和「」之間有什麼區別?
- 24. PEG和CFG之間有什麼區別?
- 25. SQL語句中的反引號和方括號之間的區別是什麼?
- 26. KVC和Properties之間有什麼區別?
- 27. 正常運行時間和uptime_since_flush_status之間的區別是什麼
- 28. 線和三網,魔杖和triand之間的區別是什麼?
- 29. x [1,1]和x.item(1,1)之間的區別是什麼?
- 30. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
HIYF:http://www.haskell.org/hoogle/?q=%28%24!%29&format=sherlock – jberryman 2010-05-07 21:19:25
另請參閱http://stackoverflow.com/questions/940382/haskell-difference-between-點和美元符號 – 2011-04-19 01:44:50