タグ付けされた質問 「typing」

14
プログラミング言語を勉強していることを両親に説明するにはどうすればよいですか?
現在、コンピューターサイエンスの修士号を取得しています。プログラミング言語、特に型システムに興味があります。私はこの分野の研究に興味を持ち、次の学期にこのテーマの博士号を取得します。 さて、ここに本当の質問があります。コンピューターサイエンスや関連分野の知識がまったくない人に、私が(したい)ことをどうやって説明できるのでしょうか。 タイトルは、私が自分のしていることを両親や友人などに説明することさえできないという事実から来ています。ええ、「全体のポイントはソフトウェア開発者がより良いソフトウェアを書くのを助けることです」と言うことができますが、私はそれが本当に役に立つとは思いません。私は中世の人にとって自動車整備士だと言っているように感じます。彼らは単に私が何を話しているのか知らず、それを改善する方法は言うまでもありません。 誰も現実世界と良い類似性を持っていますか?「a-ha」の瞬間を引き起こす啓発的な例は?コンピューターサイエンス(または学術)の経験がない60歳以上に、短くてシンプルなコードスニペットを実際に見せるべきですか?その場合、どの言語を使用すればよいですか?ここの誰かが同様の問題に直面しましたか?

1
行の多型とサブタイピングの主な違いは何ですか
行多型はサブタイピングよりも優れたアプローチであるとよく耳にしますが、それらを詳細に比較するものを見つけるのは困難です。システムのユーザーの観点に特に興味があります。 このブログ記事に出くわしましたが、以前よりも多くの質問が残されています。たとえば、サブタイピングを備えたシステムは1つのタイプを割り当て、行タイプを備えたシステムは別のタイプを割り当てると主張します。これは、サブタイピングを意図しているシステムが「行タイピング」タイプを割り当てた場合、それが誤って主張していることを意味しますか? 私が見ている1つの大きな違いは、行の型付けにより引数の型を揃えることができることです(つまり、引数のaフィールドのみに関係するが、引数は同じフィールドを持つ必要がある2つの引数関数を書く) 。
20 typing 

2
ユニバーサルタイプは、実存タイプのサブタイプ、または特別な場合ですか?
この質問は、Computer Science Stack Exchangeで回答できるため、Software Engineering Stack Exchangeから移行されました。 7年前に移行され ました。 Iは、普遍的に定量タイプかどうかを知りたい:T = ∀ X :{ ∈ X 、F :X → { T 、Fは} }、存在、定量化を、サブタイプ、又は特別なケースでありますタイプTのEを同じ署名で:TのE = ∃ X :{ ∈ X 、F :X → { T 、F } }TaTaT_aTa=∀X:{a∈X,f:X→{T,F}}Ta=∀X:{a∈X,f:X→{T,F}}T_a = \forall X: \left\{ a\in X,f:X→\{T, F\} \right\}TeTeT_eTe=∃X:{a∈X,f:X→{T,F}}Te=∃X:{a∈X,f:X→{T,F}}T_e = \exists X: \left\{ a\in …

3
タイプ 'a->' bのML関数
私たちの教授は、型を持つOCamlの関数を考えるように頼みました。 'a -> 'b つまり、何でもかまいませんが、異なるものを返すことができる1つの引数の関数です。 raise引数を無視する関数で使用することを考えました: let f x = raise Exit しかし、教授は、標準ライブラリの機能を必要としないソリューションがあると述べました。私は混乱'bしています。最初に持っていない場合、どうやって作ることができますか? 何が起こっているのかを理解したいので、スタックオーバーフローではなくここで質問しています。説明のないプログラムを見たくありません。

1
Hindley-Milnerアルゴリズムがt1-> t2のような型を生成しないのはなぜですか?
私が読んだヒンドリー-ミルナータイピングアルゴリズムの実装を書いている間、あなたは常に引数は、最終的なタイプを決定する原子の種類やタイプのいずれかを取得します、限り、すべての変数がバインドされると、それを見る、などt1 -> t1か(t1 -> t2) -> (t1 -> t2)ここでt1およびt2は型変数です。 私はあなたのような何かを取得したい方法を考えることはできませんt1 -> t2か、単にt1私が表現の実際の型を判別する方法がないので、アルゴリズムが壊れている意味するであろう理解し、。すべての変数がバインドされている限り、これらの「壊れた」タイプのような型を決して取得しないことをどのように確認しますか? 私はアルゴリズムが変数を持つ型を生成することを知っていますが、関数に引数を渡すと、これらは常に解決されますが、typeを持つ関数ではそうではありませんt1 -> t2。これが、アルゴリズムがそのような型を決して生成しないことを確認する方法を知りたい理由です。 (MLでこれらの「壊れた」型を取得できるようですが、ラムダ計算について質問しています。)

1
代数的データによる制約ベースの型推論
私はML系図の表現ベースの言語に取り組んでいるので、当然、型推論が必要です> :) 現在、EOPL(Friedman and Wand)の単純な実装に基づいて、制約ベースのソリューションを型推論の問題に拡張しようとしていますが、それらはエレガントに代数的データ型を回避しています。 これまでのところ、スムーズに機能しています。式がある場合eでa + b、e : Int、a : Intとb : Int。e一致する場合、 match n with | 0 -> 1 | n' -> n' * fac(n - 1)`, 私は当然と推論することができt(e) = t(the whole match expression)、t(n) = t(0) = t(n')、t(match) = t(1) = t(n' * fac(n - 1)のように... しかし、代数的データ型に関しては、私は非常に確信が持てません。filterのような関数を想定します。 let filter …


3
ポリモーフィックリストからポリモーフィックリストへのML関数
私はML(OCaml)でプログラミングを学んでいます。以前に、タイプのML関数'a -> 'bについて質問しました。今、私はタイプの関数で少し実験しています'a list -> 'b list。明らかな簡単な例がいくつかあります。 let rec loop l = loop l let return_empty l = [] let rec loop_if_not_empty = function [] -> [] | l -> loop_if_not_empty l (ライブラリ関数を使用せずに)空のリストまたはループを返す以外のことを行う関数を作成する方法がわかりません。これはできますか?空でないリストを返す方法はありますか? 編集:はい、私がtypeの関数を持っている場合は、'a -> 'b別の関数またはtypeの関数を作成できますが'a list -> 'b list、ここで私が疑問に思っているのは、最初の関数を作成する方法です。

3
継承、およびJavaのような言語でのメンバー/属性およびメソッドへの動的アクセス
JavaのようなOOプログラミング言語での継承について質問があります。メソッドとその呼び出しをコンパイルする方法を説明したとき、それは私のコンパイラクラスで思い付きました。コンパイルするソース言語の例としてJavaを使用していました。 次に、このJavaプログラムについて考えてみましょう。 class A { public int x = 0; void f () { System.out.println ( "A:f" ); } } class B extends A { public int x = 1; void f () { System.out.println ( "B:f" ); } } public class Main { public static void main ( String …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.