をご確認くださいまたは正しい"の英語通訳あり"このウコードスニペット

StackOverflow https://stackoverflow.com/questions/775730

質問

私C#などの開発者が作業を通じて "実世界のウ" のための真の理解プログラミングする場合には、このような私の名前は載っていませんでしたF#,と思っgrokれだけではなく"書きC#コードでF#"です。

でも今日は、たとえばれると思ったかなことが分かって良かった3つの異なる時、その見たしていきたいと思い、更新の解釈、およびrecurse(呪いものとします。

現在はいけないと思いいっかんにおすすめしたい詳細な"英語"です。きウ達のご確認をお願いいの理解、または点かい?

注意:のウーコードスニペットを引用から直接書籍)で定義されるカスタムタイプには、それと同型に内蔵のウリ。

のウーコードスニペット

data List a = Cons a (List a)
              | Nil
              defining Show

編集:その後対応いたし、ものと見なして誤解を作ってみましたがないので、かなり明確にウ"解析"ルールが正しいこと間違いです。いま私のオリジナル(誤った解釈では、その訂正ように残っているのかが不明確であった。

編集:こちらはmyオリジナル(間違った)"英語"のスニペット

  1. 私は定義されるタイプの""をご覧ください。
  2. 一覧のタイプparameterised.これは、単一の型パラメータとします。
  3. ある2つの値のコンストラクタを使用できるインスタンスの一覧です。一つの値のコンストラクタを"Nil"その他の値はコンストラクタを"連結".
  4. ご利用の場合は"ゼロ"値のコンストラクタ、ありません。
  5. の連結実績値のコンストラクタは、単一の型パラメータとします。
  6. ご利用の場合の"連結"価値のコンストラクタが2つの分野が与えられなければならない。最初に必要な分野のインスタンスである。第二に必要な分野のインスタンスである。
  7. してくれてありがとうございます意図的に省略しない"を定義するショー"が用することはできませんか追求していきたいと考えてい権利ます。

の修正の解釈となることを企図して、次のように変化BOLD)

  1. 私は定義されるタイプの""をご覧ください。
  2. 一覧のタイプparameterised.で はシングルタイプパラメータとします。
  3. ある2つの値のコンストラクタ 利用できるインスタンス の一覧です。一つの値のコンストラクタは という"空"の価値 コンストラクタを"連結".
  4. ご利用の場合は"ゼロ"値のコンストラクタ、ありません。

    5.(このラインが削除されてい...では正しくありません)の"連結"価値のコンストラクタは、単一の型パラメータとします。

  5. ご利用の場合の"連結"価値のコンストラクタが2つの分野 を入力する必要があります。最初に 必要な分野のインスタンスである。第二に必要な分野で インスタンスの一覧"の".

  6. してくれてありがとうございます意図的に省略しない"を定義するショー"が用することはできませんか追求していきたいと考えてい権利ます。

の問題は未だよくわかっていません

初期の混乱に関する部分の抜粋を読み取る"連結実績(一覧)".実は、この部分は未だよくわかっていません。

が指摘されてい項目をライン後の"連結"トークンである タイプ, とならない。と、いうことはこの線は"グローバル連結実績値のコンストラクタは2分野:一つの型'a'のその他のタイプのリストの'."

ともなっています。しかし、何かは不明である。を制作する場合インスタンスを使用連結実績値のコンストラクタは、インスタンス"解釈"の"a"という意味で、"場所、価値が渡されます。" 行ってい ない 解釈の'a'と同じです。

例えば、このことを考えGHCIセッション:

*Main> Cons 0 Nil
Cons 0 Nil
*Main> Cons 1 it
Cons 1 (Cons 0 Nil)
*Main> 

きていただいたものとさせていた"連結実績0Nil"では、"連結"価値のコンストラクタのインスタンスを生成します。0からでした.この型パラメータは"整数型".これまで、現場は混乱していた。

ただし、 と判断し の最初のフィールドの連結実績は0になります。いると判断し なし 第二野---かのみを判定するのに対し、第二のフィールド タイプ の"リスト整数.

その後、私の質問は、なぜ"a"は、最初のフィールドの平均"のことで、この分野の'a' このフィールドの値が'a'"、""の分野と のみ "のことで、この分野のリストの'"?

編集:と思いられて光りの中にあります。私の説明があります。(なんだか まだ 誤った一部のファッションだん!)

スニペット内の"連結実績(一覧)"というは、"連結"価値のコンストラクタは二つの分野では、最初のフィールドの型'a'、第二分野のタイプのリストの'.

それはまっ! 特に、今言っていること なし 約す。このキーポイントでした。

その後、ありたいと願っておりますインスタンスを使用し、"連結"価値のコンストラクタです。またタイプの通訳:"連結実績0付属しておりません。この 明示的に この連結実績値のコンストラクタを利用0の値の最初のフィールド、ゼロの値として。

ことになるすべてのがあります。一ることをご存知の値はコンストラクタを定義を指定し もの種類, ものが明確になる。

謝のためにも対応。と申し上げたように、い切ったままだ教えてくださいます。感謝。

役に立ちましたか?

解決

  • の連結実績値のコンストラクタは、単一の型パラメータとします。

辞:すでにみんなparametrizedを利用したいのですが宣言された data List a.一つ実効性のあるしなければならないNil::リストのIntできるようにな交流でNil::リストの文字に置き換わります。

  • ご利用の場合の"連結"価値のコンストラクタが2つの分野が与えられなければならない。最初に必要な分野のインスタンスである。第二に必要な分野のインスタンスである。

んで入れ替え:最初に必要な分野のインスタンスである、第二分野のインスタンスである。

この章では現実世界のウ きます。

感謝。この章でいます。なので---のコードは"連結実績(一覧)"と思い、"連結の"のった旨の連結実績値のコンストラクタのたparameterised.ていない対象の構文parameterised種類かと推測される構文を必要求の再記載の"a"を目的とする場合に使用。だなんて言ってることは必要ですか?ることになりませんが"a"です。

世界中の巨大フロアを揺ら.一を宣言いたしましたパラメータにタイプしてく再利用でない"とすることがあってはなりません。 ちょっとビットのように a -> b -> a タイプシグニチャー:aパラメータ化、タイプ、そしていますのでどを返します。

OKだが、ここは混乱している。この"a"というと最初のフィールドのインスタンスである"を、

世界中の巨大フロアを揺るが ない trueです。それだけでこのデータタイプparametrizesあいタイプ。

でも最初のフィールドの値としての価値が渡された。つまり、タイプを指定します。

いいえ、それにも当てはまらない。

この指針の例では、構文のできるまたは見たことのない前

foo :: Num a => a -> a

これはかなりの標準名と数値とは何かを与えてくれることも。私が実際に意味する"数"のウ語も一部の任意の型は"a"を実装する"Num"クラスです。

このように、これを解析し、英語:

させるタイプの実施のNum typeclass、その署名を用いる方法は一つのパラメータのタイプ、および、返却値の型に"byte[]"を指定型

ううです。

これは私のインスタンスのリストの仕様に連結実績も混乱す:これまでの場合には注意して構文解析する:は連結実績が指定コンストラクタは、基本的にはパターンウを包むデータ、(表a)のようなコンストラクタが、これらは実際には単なるタイプのように、IntまたはDouble.aタイプではなく、価値のいかなる意味においてもお時間をいただきました。

編集: への対応が最後に編集できるようになります。

と思うの解剖が求められる。そんな対処にお問い点です。

ウターのコンストラクタはちょっと変わったかを定義したコンストラクタの署名により、られないときには、いくつかについてその他の足場.データ型にウないという概念の変数となります。(注:が代替構文をこのような考え方は、快でみましょうを無視することを、もうお試しいただきましたか?.

もう一つは、ウコードが高密度;その種類に署名しています。また、同じシンボルを再利用の異なるコンテキストを共有します。タイプ慮も大きな役割を果たします。

なおタイプ:

data List a = Cons a (List a)
              | Nil

私はこのチャンク数個:

data リスト

この定義の名前、型、および他のパラメータ化されたタイプです。りますのでご注意見このホームページからシンプルその他のタイプフェースの通称です。

連結実績 a (List a) |
Nil

この名前のデータコンストラクタです。 このタイプ.していきますので、しかし、パターンマッチでは、ala:

foo :: List a -> Bool
foo Nil = True

通知方法リストを、署名、Nilは両方のデータのコンストラクタの"もの"をパターンマッチします。

Cons (リスト)

これらの種類の値をスロットのコンストラクタです。連結実績には、一つのタイプa、タイプリスト。

その後、私の質問は、なぜ"a"は、最初のフィールドの平均"のことで、この分野の"a"は、このフィールドの値が'a'"、""の分野ということ"のことで、この分野のリストの'"?

シンプルです:しないと思うので、米国を指定する型思いのでウは慮しのタイプです。ですから、当社の意図や目的を単純にこだわりは0であり、Nilのです。そして、う当社のコードと考:

  • んー、どんなタイプの連結実績0はNil
  • は、連結データのコンストラクタリスト。どんな種類の一覧は
  • したという人もいるかもしれな使用に最初のパラメータで最初のパラメータをInt(別の簡素化;0にはなったものtypeclassedとしてNum)で、その意味はNum
  • こんにちは、この型のソリストはIntもあるかという

(注などを実際にが出てくるんですが、それを実装します。ウでたくさんのおかいものが慮種類は、一部のエラーメッセージをう。)

他のヒント

工夫して通常のない全ての方が、ご存知のC#と思ったことがご提供いただきました。

この場合どのように記述に List a 定義にクライアントまで、フルのC#でもこのクリアーにもアップ(以る混乱させることにもなります。

class List<A>
{
}

class Nil<A> : List<A>
{
    public Nil() {}
}

class Cons<A> : List<A>
{
    public A Head;
    public List<A> Tail;

    public Cons(A head, List<A> tail)
    {
        this.Head = head;
        this.Tail = tail;
    }
}

ご覧のとおり;

  • List タイプシングルタイプパラメータ<A>),
  • Nil コンストラクタを持たないパラメータ
  • Cons コンストラクタは二つのパラメータの値 head タイプ A と価値 tail タイプ List<A>.

現在、ウを NilCons けのコンストラクタの List a データ型、C#な種類のやりとりで、このような場合は、似失敗します。

していますが、なんとかここかで感じように異なる A's"。

(作業を行ってくださいコメントこの恐ろしいとの比較なウのデータです。)

Cons a (List a)

反対の最初のフィールドは、タイプ「a」の値です。第二は、「List a」タイプの値、すなわち、現在のリストのパラメータと同じタイプのパラメータリストである。

5間違っている、との両方を交換するために、次のように私は6を言うと思います:

短所は、{1} {2}(リストA){3}短所と呼ばれるコンストラクタである(前の部分は、{1})は、2つの値が必要タイプリストの値(データリスト部)のための一をタイプおよび種類のリストA({2}と{3}の間の部分)。

のいずれか({1}と{2}の間の部分)

混乱の見かけ上のソースであなたを助けるために:Haskellであなたはめったに明示的な型パラメータを与えなければならない - 型推論は、自分の価値観から型を推測します。あなたは関数やコンストラクタに値を渡したときにそう意味では、そう、あなたはまた、タイプ、すなわちを指定します。渡された値の型。

それは名前と型を駄洒落と実際にそれらの間にの構文の区別をしていないため、

うんデータの構文は、少し紛らわしいです。具体的には、コンストラクタの定義のように:

Cons a (List a)

最初の単語は、コンストラクタの名前です。他のすべての単語がいくつか事前に宣言型の名前です。だから、aList aの両方がスコープ内に既にある(aは「a」でdata List aによって範囲に持って来られた)、そして、あなたはそれらのパラメータの型であることを言っています。彼らの役割は、より良い使用して同じことを示すことによって立証される可能性があります。の記録構文

Cons { headL :: a, tailL :: List a }

すなわち。 List IntCons:のそれはIntコンストラクタで構築された場合には型List Intの値は、2つのフィールドがあります。それはNilで構築された場合、それは何のフィールドがありません。

  

私は「Cons 0 Nil」と入力すると、それはリストのインスタンスを作成するために「Cons」値コンストラクタを使用しています。 0から、それは型パラメータが「Integer」であることを知ります。これまでのところ、ない混乱ます。

     

しかし、それはまた、短所の最初のフィールドの値は0です。しかし、それは2番目のフィールドの値については何も決定していないと判断した...それだけで2番目のフィールドは、「リスト整数」の型を持っていると判断しますます。

いいえ、それは2番目のフィールドの値がNilであると判断します。あなたの定義を考えると、NilはタイプList aの値です。したがって、そうCons 0 Nilです。そしてCons 1 itで2番目のフィールドの値がitです。すなわち、Cons 0 Nil。これは、REPLを示しまさに次のとおりです。 Cons 1 (Cons 0 Nil)ます。

私はあなたの編集した質問を見ます。

  

私は短所を使用してインスタンスを作成する場合   値コンストラクタ、それらのインスタンス   「」としての意味最初の「解釈」   「ここで渡された値を置きます。

"短所(リストA)"、共に "A" とタイプである "リスト" に。私は、「値」はそれとしているものを理解していません。

  

私は「短所0ナシ」と入力し、それを使用しています   「短所」値コンストラクタが作成するために   リストのインスタンス。 0から、それは学習します   typeパラメータは「整数」です。   これまでのところ、ない混乱ます。

     

しかし、それはまた、と判断しました   短所の最初のフィールドの値   0です。しかし、それはについて何も決定していません   2番目のフィールドの値が...それ   唯一の2番目のフィールドと判断し   「リスト整数」の型があります。

第2フィールドの値がNilある。

  

だから私の質問は、なぜ「」でない、あります   最初のフィールドは、「この種のことを意味します   フィールドには、「A」と、この値であります   フィールドには「A」である 『第二の」しばらく』   フィールドには、「これだけの種類を意味し、   フィールドには、「「一覧」で?

「」最初のフィールドに「このフィールドのタイプは 『A』である」という意味します。 2番目のフィールドに意味「LIST」「このフィールドの種類は、 『リストA』です」。上記「短所0ナシ」の場合には、 '「整数」であると推測されます。だから、「短所(リストA)は、」「短所整数(リスト整数)」になります。 0はInteger型の値です。無記号は「リスト整数」型の値です。

  

このフィールドの値は 'A'

私はあなたがこのことで何を意味するのか理解していません。 「」型の変数です。それが値としなければならないでしょうか?

それでも、このスレッドを見ている場合には、

ただ、あなたにいくつかの余分な「助け」を得ました。 Haskellで、パラメータ化された型がこのように一般的に受け入れられている、それは通常、タイプレベルの関数であると考えていること - Haskellでは慣習のカップルその台無しどのように物事が行われるべきであるの他人のアイデアを持っています。同様に、値コンストラクタはまた、それらの「値(またはそれ以上)を取り、結果値を生成する」に加えて、パターンマッチングを可能にする「特別な」機能として考えられている。

ハスケルのもう一つの「面白い」の特徴は、それが明示されていない(または暗黙的に)ないことであるのその引数は括弧内にある場合でも、を、関数に引数を評価します。私は少し異なることを述べてみましょう:Haskellの関数は、他の引数の前に括弧内の引数を評価しません。引数は、彼らが「最初」に評価していないと、グループ化の目的のために括弧に入れています。それ自身の引数のいずれかの陰関数アプリケーションよりも高い - Haskellは他の操作よりも高い優先順位で機能(「適用」)に引数を割り当てます。 の3 の2つの引数を持っていConsコンパイラに伝えるために、そしてない - (List a)コンストラクタは二番目の引数、Cons周りに括弧を持っている理由です。括弧はグループ化するためのものではなく、優先順位のために!

やや側話題のとして、F#での型に注意してください。バックでint list、ない(List Int) - F#はMLでそのルーツを持っているので、そのパラメータ化された型は、前のパラメータを持っています!関数に最初の関数は、引数 - それはHaskellは関数を同じ方法だからHaskellは、それを他の方法を行います。これは一般的な使用パターンを奨励し、Haskellの型と値コンストラクタは資産計上されている理由を説明 - あなたはタイプ/クラスに関連するものを扱っていることを思い出させるために、

さて、私は終わりです。私はあなたの財産上のこの巨大なウォールO」テキストを入れていただき、ありがとうござい...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top