1
A
回答
2
我不認爲這是可能的在Scala沒有包裝在一個額外的對象的功能。這樣做的一個方法是:
type XtoX = {def apply[X](x: X): X }
def selfApp(f: XtoX): XtoX = f(f)
現在,您可以定義一個對象具有適當類型的應用方法是這樣的:
object ID { def apply[X](x: X): X = x }
並調用selfApp
爲selfApp(ID)
,這將直接返回它給出的對象。然而,這不起作用:
def id[X](x: X): X = x
selfApp(id)
你也不能使用匿名函數x => x
。這是因爲當傳遞方法或匿名函數時,表示爲FunctionN
對象,並且FunctionN
特徵具有單態(即非泛型)功能。所以你需要自己使用一個通用的apply
方法明確地創建一個對象。
在Haskell中,你可以通過使用RankNTypes擴展這樣做沒有任何包裝:
{-# LANGUAGE RankNTypes #-}
selfApp :: (forall x. x -> x) -> (forall x. x -> x)
selfApp f = f f
,當然還有在動態類型語言,你可以只寫功能,無需擔心類型。例如在Python中:
def id(x): return x
def selfApp(f): return f(f)
print(selfApp(id)(42)) # Just works - no extensions, no wrapping, no nothing
相關問題
- 1. 如何在scala中編寫函數isSymbol?
- 2. 編寫的編程語言
- 3. 如何編寫Scala中的類型類?
- 4. 如何在Scala中編寫數據類型的簡寫
- 5. 編寫調用scala中泛型函數的泛型函數
- 6. 編程語言中的構造函數
- 7. 函數式編程語言中的CMS
- 8. 語言編寫的原型
- 9. 使用匯編語言編寫C程序的函數
- 10. 使用函數式編程語言編寫的開源項目
- 11. 在android中用Init.goldfish編寫什麼編程語言?
- 12. r data.table語言中的函數式編程/元編程/計算
- 13. 寫編程語言解釋
- 14. 彙編語言的類型
- 15. 在編程語言中使用任何類型和實現泛型列表
- 16. 類型安全編程語言..?
- 17. 寫編程語言:如何編譯
- 18. 從彙編語言編寫C程序
- 19. 以下函數在Scheme編程語言中做了什麼
- 20. 在解釋性編程語言中實現函數
- 21. Scala中的類型級別編程
- 22. Scala類型編程資源
- 23. 由K&R編寫的C語言編程語言示例CH1
- 24. 使用什麼語言編寫Go編程語言?
- 25. 在Java中編寫函數?
- 26. 在Prolog中編寫函數
- 27. 在Chainer中編寫函數
- 28. 在linux中混合使用彙編語言和C編程
- 29. Rails類型的webapp中的'Model'如何以函數式編程語言實現?
- 30. Scala中的泛型編程
對於我們這些沒有Lambda微積分背景的人,請翻譯一下符號。 – davidrpugh
@davidrpugh像'selfApp(f:[X] X => X):[X] X => X = f(f)'(這實際上不是合法的語法)。 – sepp2k
「可以寫這個函數是Scala還是其他語言?」 - 是的。事實上,你已經在你的問題中以「任何其他語言」發佈了一個實現。 –