f#の代数データ型はどのように機能しますか?私はそれを説明するための基本的なサンプルプログラムを見たいと思うが、見つけられないようだ。F#の代数データ型を使用して代数問題を解決する
たとえば、2次式を実行するコードや、形状の領域を見つけるためのソリューションがあります。
f#の代数データ型はどのように機能しますか?私はそれを説明するための基本的なサンプルプログラムを見たいと思うが、見つけられないようだ。F#の代数データ型を使用して代数問題を解決する
たとえば、2次式を実行するコードや、形状の領域を見つけるためのソリューションがあります。
の形容詞algebraic
は、代数問題を解決するために使用されるタイプを指しません。
x + y = 3 or 5 * y = 10
形容詞algebraic
はタイプが構築される方法を指す/乗算(*
)及び加算(+
)のalgebraic
演算子を使用して宣言しました。特に、代数型はタプルであるproduct types(*
)とすることができる。または文字(|
)を使用
type Variable = string * int
とsum types、代わりに組合を判別しているプラス記号(+
)、例えばの
type Term =
| Var of Variable
| Const of Constant
| App of Constant * Term list
1は、それらの意味を確認する必要がありalgebraic data typesにWikipediaの記事を考えると、あなたは、例えば、あなたが求めるものを見つけていない理由、これが説明しますことを理解し、シフトしたら、代数的データ型を使用して代数問題を解決する方法を説明する記事。
本質的に新しいタイプがなどint
、char
、string
、などprimitive data typesとproduct
とsummation
の代数の演算子から構築されているが、より重要なのは、代数的データ型がtype theoryに基づいており、それがすべてでformal system持参されています正式なシステムの利点。
タプルの型を宣言するための演算子とタプルの値を作成するために使用される演算子の違いにも注意してください。
type Variable = string * int type
("x",0) value
通知タイプの*
オペレータと値の,
演算子。
また
type Term = type
| Var of Variable
| Const of Constant
| App of Constant * Term list
Var("x",0) value
Const("1") value
App("add",[Const("1"),Var("x",0)]) value
各possible option
値と共に使用した場合case identifier
を有していなければならないことに注意してください。
ADTの詳細については、generalized algebraic data typeを参照してください。しかし、悲しいことにF#には含まれていませんが、requestedです。
Mark SeemannがTomas PetricekによるPower of mathematics - Reasoning about functional typesへのリンクを提供しました。トーマスは、リンク切れfairly readable introduction
を持っていますが、ここにあるか、似たような:、What the Heck are Algebraic Data Types? (for Programmers)または私はHaskellのを使用していますクリス・テイラーによって好むシリーズが、アイデアは、F#に変換します:
The Algebra of Algebraic Data Types, Part 1
The Algebra of Algebraic Data Types, Part 2
The Algebra of Algebraic Data Types, Part 3
基本的に、F#はPyretに似た機能的プログラミング言語ですか? –
これは私が[Pyret](https://www.pyret.org/)について聞いた最初のものですが、イントロの段落を素早く読んだ後、彼らは[MLファミリ]の両方の機能的言語ですhttps://en.wikipedia.org/wiki/ML_(programming_language))しかし、私はピレのためのADTを見つけることができませんでした。そして、ピレのタイプシステムについて少し読んだだけで、私はもう一方に翻訳するとは言いませんタイプシステムがどのように異なっているのかによって簡単になります。 –
あなたはすでに質問をして答えを得ていますが、このコメントはあなたがPyretの助けを求めていると信じていますが、PyretをF#に近づけてそこから行ったと思います。 PyretとF#の型システムの違いについて新しい質問をすることは興味深いでしょうが、私は自分自身を含め誰にも答えられるかもしれません。 –
どういう意味ですか? –
http://tomasp.net/blog/types-and-math.aspx –