2012-03-04 16 views
2

Opaの背後にある概念をより深く理解しようとしています。特に、私は、MLやHaskellのような差別化された共用体を提供しない(つまり、0以上の値をラップするいくつかのコンストラクタを定義する)ことはできませんが、それらのレコード型と合計型にとどまることには興味があります。この決定は私には完全に意味があります(おそらく私はFPよりもOOPにいるためです)。そして、それは差別化された組合でできるすべてを実装できるようです。Opaは代数的データ型を提供しますか?

しかし、言語でも代数データ型がサポートされているとは言えますか?これは実用的な質問ではなく、用語に関するものです。

BtwのWikipediaには、訂正する必要があります。

+0

Opaは、代数データ型という用語を理解する限り、再帰的、多分抽象的である可能性がある総和と積の型を提供しています。 – akoprowski

+0

代数データ型のそのような定義のリンクを私に与えることができますか?多分、問題はその用語が厳密に定義されていないということです。たとえば、http://foldoc.org/algebraic+data+typeの定義は、(私が理解するように)値はコンストラクタアプリケーションの観点から定義する必要があります。 Opaのケースではありません。 – Milo

+0

私の理解では、代数データ型は製品タイプの合計を提供することに関するものです。私は、コンストラクタとの和の変種をマーキングすることが非常に重要であることを認識していませんでした。 Opaは、代数的データ型(とそれ以上)でできるすべての型システムが可能なので、主に用語論争であると考えていましたが、Opaは修飾されません。 – akoprowski

答えて

3

Opaではすべてがレコードであり、実際には差別化された共用体で実行可能な処理を実装できます。

OCamlでは、あなたはそれがあなたはOCamlのとは異なり、オーパで明示的にその型を定義せずにレコードを操作できる、ということに気づくかもしれ type tree = {int leaf} or {tree left, tree right}

なりますオーパでtype tree = Leaf of int | Node of tree * tree

を書きます

。 Opaがレコードのみを使用しても、識別された共用体を定義することは依然として簡単です。

Btw、http://doc.opalang.org/manual/The-type-systemを見ましたか?

+0

はい、私はマニュアルを見ました。私の注目を集めたのは、「和のいくつかのケース(つまりレコード)が同じラベルを共有する場合、このラベルはそれぞれのケースで同じタイプでなければなりません...」しかし、私は、差別化された組合の代わりにレコードの合計を使用することが可能かどうかを論じません。このタイプのシステムはかなり異なっているように思えますが、それはまだそれが一種の代数 - データ型ベースであると仮定するのが正しいかどうか疑問です。 – Milo

関連する問題