2016-05-23 28 views
2

f#の代数データ型はどのように機能しますか?私はそれを説明するための基本的なサンプルプログラムを見たいと思うが、見つけられないようだ。F#の代数データ型を使用して代数問題を解決する

たとえば、2次式を実行するコードや、形状の領域を見つけるためのソリューションがあります。

+1

どういう意味ですか? –

+0

http://tomasp.net/blog/types-and-math.aspx –

答えて

9

の形容詞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の記事を考えると、あなたは、例えば、あなたが求めるものを見つけていない理由、これが説明しますことを理解し、シフトしたら、代数的データ型を使用して代数問題を解決する方法を説明する記事。

本質的に新しいタイプがなどintcharstring、などprimitive data typesproductsummationの代数の演算子から構築されているが、より重要なのは、代数的データ型が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

+0

基本的に、F#はPyretに似た機能的プログラミング言語ですか? –

+1

これは私が[Pyret](https://www.pyret.org/)について聞いた最初のものですが、イントロの段落を素早く読んだ後、彼らは[MLファミリ]の両方の機能的言語ですhttps://en.wikipedia.org/wiki/ML_(programming_language))しかし、私はピレのためのADTを見つけることができませんでした。そして、ピレのタイプシステムについて少し読んだだけで、私はもう一方に翻訳するとは言いませんタイプシステムがどのように異なっているのかによって簡単になります。 –

+0

あなたはすでに質問をして答えを得ていますが、このコメントはあなたがPyretの助けを求めていると信じていますが、PyretをF#に近づけてそこから行ったと思います。 PyretとF#の型システムの違いについて新しい質問をすることは興味深いでしょうが、私は自分自身を含め誰にも答えられるかもしれません。 –

関連する問題