9

次のような言語はありますか?

1)機能的

2)型推論がある

3)カリー化

4)ファーストクラスの値としてタイプがあります

また、それからJVMおよび/またはCLRにコンパイルしたい

4

4 に答える 4

24

F#は機能的であり、リフレクションを介して実行時に型を分析できるという意味で、型推論、カリー化、および型をファーストクラスの値として備えています。これはCLRにコンパイルされ、Monoでうまく機能します。

例: F#.NETジャーナルの私の(無料ではない)記事Structural Typingから引用:

次のcreateType関数は、指定された名前の新しい.NETアセンブリ、新しいモジュール、および新しいパブリッククラスタイプを作成します。

> let createType typeName =
    let name = System.Reflection.AssemblyName(Name="tmpAssembly")
    let run = System.Reflection.Emit.AssemblyBuilderAccess.Run
    let builder = System.Threading.Thread.GetDomain().DefineDynamicAssembly(name, run)
    let mdl = builder.DefineDynamicModule "tmpModule"
    let attrs = TypeAttributes.Public ||| TypeAttributes.Class
    mdl.DefineType(typeName, attrs);;
val createType : string -> TypeBuilder
于 2013-01-25T21:05:05.240 に答える
7

私はそれを学び始めたばかりですが、Coqはあなたのために働くかもしれません。

型(はい、その型のインスタンスではなく、生の型)を取り込んで、別の型(ここでも、インスタンスではなく型だけ)を返す関数を持つことはかなり可能です。プログラムのフォーマル検証に興味がある場合は、一見の価値があります。

また、コードをHaskell / OCaml / Schemeに変換できるというちょっとした利点もあり、CoqにはIO /ライブラリがない傾向があるため、IO/ライブラリを使用できます。

型推論とカリー化がありますが、言語の型システムは標準のMilner-Hindley型システムをはるかに超えている(そしてより表現力がある)ため、型推論は完全ではありません。

于 2013-01-25T23:35:44.450 に答える
2

Scalaを見てください。JVMと.NETの両方で動作します。ここにあなたが探しているものを含むいくつかの機能があります-http: //www.scala-lang.org/node/104、「Scalaは機能的です」セクション、「ローカル型推論」、「カリー化」および「事前定義された関数classOf」の記事を見てください、また、トップタイプAny、値タイプのパターンマッチング、リフレクトパッケージがあります。

于 2013-01-27T03:10:57.377 に答える
-1

まず、ウィキペディアタイプの干渉から始めます。この質問に対する答えはHaskellまたはOCamlのようです。

于 2013-01-25T09:58:03.397 に答える