タグ付けされた質問 「programming-languages」

プログラミング言語の設計、実装、および分析に関する質問。このサイトのトピックから外れている、プログラミング方法に関する質問は対象外です。

4
実装なしでプログラミング言語を指定できますか?
実装が存在しない可能性のあるプログラミング言語を指定することは理論的に可能ですか?プログラミング言語は、関数を定義する方法です。実装とは、特定の入力でプログラムに対応する関数の出力への特定の入力で、その言語で特定のプログラムを実行するメソッドを意味します。 そのような言語の最小要件は何ですか?

3
匿名ラムダ関数(関数型プログラミング)
匿名(ラムダ)関数とは何ですか?関数型プログラミング言語における無名関数の正式な定義は何ですか? 簡単に言うと、scheme / lispでプログラミングしているとき、匿名(ラムダ)関数は識別子にバインドされていない関数だと思います。 ラムダ関数について正式に言えるのはそれだけですか?この単純な定義に追加できる詳細があると思います。詳しく説明していただき、ありがとうございます。


3
ポリモーフィズムと帰納的データ型
私は興味がある。私はOCamlでこのデータ型に取り組んできました: type 'a exptree = | Epsilon | Delta of 'a exptree * 'a exptree | Omicron of 'a | Iota of 'a exptree exptree これは、明示的に型指定された再帰関数(ごく最近追加された機能)を使用して操作できます。例: let rec map : 'a 'b. ('a -> 'b) -> 'a exptree -> 'b exptree = fun f -> begin function | Epsilon -> …



2
ラムダ計算を研究に関連させるものは何ですか?
私は来年の秋にコンピュータサイエンスの学部課程を始めていますが、関数型プログラミングのコンテキストでのλ計算については本当に理解できません。私はこれを完全に誤解しているかもしれませんが、スタンフォード哲学百科事典のこの定義に基づくと、これは関数のもう1つの表記法です。 それは場合であることだけで、なぜそれが計算アルゴリズムの実行時に通常の関数表記上λ計算を使用するのが有利ですか?

2
変数とポインターの違いは何ですか?
OOと関数型プログラミングの違いを概説する記事を読んでいた私は、関数ポインターに出くわしました。コンピュータサイエンスの学位(2003年)を修了してからしばらく経っています。そのため、ポインタを調べて記憶を更新しました。 ポインタは、メモリアドレスへの参照を含む変数です。それらは、そのようなデータが存在する場合、そのメモリアドレスに含まれているデータを指すと見なすことができます。または、記事の場合のように、コードのセクションへのエントリポイントを示し、そのコードを呼び出すために使用できます。 なぜこれが変数と異なるのですか?変数はメモリアドレスの記号名であり、コンパイラは名前を実際のアドレスに置き換えます。これは、変数がメモリ位置への参照を含み、そのようなデータが存在する場合、そのアドレスのデータを指すと見なすことができることを意味します。 違いが動作にある場合(おそらく、ポインターを実行時に再割り当てできない、または他の値ではなくシンボリック変数名のみを割り当てることができます)は、それが特定の型の変数、つまりポインター型であることを意味していませんか?同じように、整数型であると宣言された変数は、それが使用できる目的でコンパイルによって制限されます。 ここで何が欠けていますか?

2
それ自体でプログラミング言語をコンパイルする
私はコンピュータサイエンスの学生です。独自のプログラミング言語(命令の少ない基本言語)を作成したい。 私は構文解析を行う方法を知っています。すでにPerlでそれを行いました。記事では、コンパイラーについて何かを読みました。コンパイラーはそれ自体で行われます。 たとえば、CコンパイラはCで書かれています。それはどのように可能ですか?自分の言語を作ることはできますが、どうすれば実行できるのかわかりません。何か案が? それは本当に良い質問で、ブログでプロジェクトを書くことができます。


3
whileループの小さなステップの操作セマンティクスで状態が変更されないのはなぜですか?
通常、whileループの構造的操作セマンティクス表現では、プログラムの状態は変化しません。 (whileBdoS,σ)→(ifBthenS;(whileBdoS)elseSKIP,σ)(whileBdoS,σ)→(ifBthenS;(whileBdoS)elseSKIP,σ)(while \> B \> do \>S, \sigma) \rightarrow (if \>B \> then \>S; (while \> B \> do \>S) \> else \> SKIP, \sigma) 私にとって、これは直感的ではありません。状態が変化しない場合(つまり、メモリのステータスが同じままである場合)、は引き続きtrueであり、プログラムは終了しません。BBB このルールで州が変わらない理由を誰か説明できますか?

1
コールスタックとして使用した場合、ガベージフリーのスパゲッティスタックはDAGを形成しますか?
私はプログラミング言語の実装手法を調べています。最近、スパゲッティスタックに出会いました。これは、継続スキームスタイルモデル(SchemeやSML / NJなどでの使用を想定)に適していると思われ ます。簡単にするために、この質問ではシングルスレッドプロセスのみを検討します。 ただし、Wikipediaの図 (他の場所にもあります)には少し混乱してい ます。特に、そのような状況がどのように起こり得るのか、私にはわかりません。灰色で表示されたブランチは到達不可能であり、ガベージコレクションの対象となることしか想像できません。一方、スパゲッティスタックを使用してCPSを実装する方法については漠然と理解しているため、その構造でループが発生する方法を想像することはできません。「親ポインタツリー」ではなく、実際には有向非循環グラフであり、スレッドと同じ数の非ガベージソースと、(潜在的な)「出口ポイント」と同じ数のシンクがあると結論付けなければなりません。 しかし、この実装についての私の理解はかなり曖昧なので、おそらく何かを見落としていると思います。ここで「スパゲッティコールスタック」について誰かに教えていただければ幸いです。つまり、CPSベースのプロセスを実装するためにSchemeやSML / NJで使用されるデータ構造を意味します。 次のスパゲッティコールスタックがあるとします。 [exit point] <-- ... <-- [frame A] <-- [frame B (active)] ^ `---- [frame C] 私が理解している限り、Bからのフロー制御は、親にジャンプしてスタックを巻き戻します(Aがアクティブになり、到達不能Bはガベージになります)、またはBまたは参照が保持する参照のみを使用して接続されたサブフレームでアクティブフレームを置き換える新しいフレームに。実行はフレームCにフローできません。これは、フレームCがゴミであることを意味します。 以前の状況ではなく、次のガベージフリーの状況が発生する可能性があると思います。 [exit point] <-- ... <-- [frame W] <-- [frame X] <-- [frame Z (active)] ^ | `---- [frame Y] <---´ たとえば、フレームZが、フレームXまたはフレームY(どちらもWに戻る)で継続する決定関数に属していると想像できます。これは、スパゲッティコールスタックが「親ポインターツリー」ではないことを意味します。 ただし、ループを構成できる状況は想像できません。たとえば、次の状況を考えます。 …

1
静的型チェックが保守的すぎるのは不自然な例では何ですか?
でプログラミング言語で概念、ジョン・ミッチェルは、静的な型チェックが原因で停止問題の(過度に厳格な)は、必ずしも保守的であることを書き込みます。彼は例として以下を与えます: if (complicated-expression-that-could-run-forever) then (expression-with-type-error) else (expression-with-type-error) 誰かが実際に問題となる不自然な答えを提供できますか? 私はJavaが次のような場合に動的にチェックされるキャストを許可することを理解しています: if (foo instanceof Person) { Person p = (Person) foo; : } しかし、私は、言語間の問題よりも、Java言語/コンパイラーの欠陥の必要性を考えています。


2
Petersonの2プロセス相互排除アルゴリズムは、死にかけているプロセスを説明しますか?
私は中にいると思いピーターソンのアルゴリズムのための相互排除プロセスが最初のクリティカルセクションを入力する場合は、クリティカルセクションに入るのを待って、永遠に死ぬこと、またはキャンセルされ、他のプロセスだろうループました。 この図では、プロセス1が停止した場合、プロセス1の背後にある残りのプロセスは、プロセス1の場所まで実行されますが、その後ループします。 クリティカルセクションに到達したプロセスが、終了する前に最初に停止した場合はどうなりますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.