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(ID)
としてselfApp
を呼び出し、単に返しれますそれが与えられたオブジェクト。しかし、これは動作しません。
def id[X](x: X): X = x
selfApp(id)
も、あなたは匿名関数x => x
を使用することができます。これは、メソッドまたは匿名関数を渡すとき、FunctionN
オブジェクトとして表現され、FunctionN
形質は単体(すなわち、非汎用)apply
関数を持つためです。そのため、オブジェクト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. プログラミング言語のインタプリタを書く
- 2. JVMの言語を書く
- 3. パーサーとコンパイラを書くのに最高のプログラミング言語は何ですか?
- 4. 基本的なtracerouteスクリプトをC言語で書く
- 5. ウェブボットを書くのに最高のプログラミング言語はどれですか?
- 6. R言語/ reporteRs複数の書類を書くためのループ
- 7. C言語の文をVHDLに書く
- 8. HTML言語でマークダウン言語を書くには? MDファイルに
- 9. 関数型プログラミング言語の疑似コードの書き方は?
- 10. Neo4jスカラー関数(C言語)#
- 11. コンパイラを書くのに最も簡単なプログラミング言語は何ですか?
- 12. メリット、デメリット、そして難しい言語を書くために言語を書くこと。
- 13. Tesseractの言語ファイルを書く
- 14. jexcelapiに中国語を書く
- 15. 中置関数を書く方法
- 16. 関数は、Cプログラミング言語
- 17. cプログラミング言語 - declare()関数
- 18. XMLHttpRequestでsend()を書く前にonload()関数を書く理由
- 19. AWKで言語パーサーを書くことは可能ですか?
- 20. PHPで関数を書く
- 21. Prologで関数を書く
- 22. プログラミング言語でのタイプ化の意味
- 23. 私自身のシェルをC言語で書く
- 24. 非常に基本的なmex関数をmatlabに書く
- 25. Python風の字下げ文法で言語を書くには?
- 26. Java変数の宣言に関連するカスタムルールを書く
- 27. 自分のパイプ機能をC言語で書く
- 28. C言語でpcreに適切なパターンを書くには
- 29. C言語ではなくOpenCLカーネルを書くことはできますか?
- 30. 複数のtxtファイルを作成してC言語で書くと
ラムダ微積分の背景のない人は、表記を翻訳してください。 – davidrpugh
@davidrpugh 'selfApp(f:[X] X => X):[X] X => X = f(f)'のようなものです。 – sepp2k
"この関数をScalaや他の言語で書くことはできますか?" - はい、そうです。実際には、あなたはすでにあなたの質問に「他の言語」の実装を掲載しています。 –