問題タブ [imperative-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
87 参照

conditional - OCaml コード生成のバグの可能性

次の自己完結型コードは、おそらくコード生成に関する OCaml の問題を強調しています。配列 x には、[0..9] 内のノードの接続情報があります。関数 init_graph は元々、すべてのノードの着信ノードの明示的な配列を構築していました。以下に示す縮小版は、接続された 2 つのノードを出力するだけです。

関数 init_graph2 は、「役に立たない」else ブランチを除いて、init_graph と同じです。しかし、これら 2 つの関数によって生成される出力はまったく異なります。実行すると、init_graph が 2 番目の if-then-else をスキップする場合があることがわかります。

このプログラムは、バージョン 3.12.1 (make_matrix を適切に置き換えたもの)、4.03.0、および 4.03.0+flambda で実行しました。それらはすべて同じ問題を抱えています。

OCaml が不思議なことにブランチをスキップしたり、場合によっては両方のブランチを取得したりする、この問題と関連する問題に対処してきました。協力者のおかげで、実際のコードを小さな自己完結型の例に切り詰めることができました。

ここで何が起こっているかについてのアイデアはありますか?そして、これと関連する問題を回避する方法はありますか?

更新: Ocamllint は init_graph2 の else ブランチに「役に立たない」というフラグを立てますが、これは明らかに間違っています。

第二に、camlspotter によって提案されたインデント方法は、まさにこのシナリオで誤解を招く可能性があります。Ocamllint のアドバイスに従い、else ブランチをコメントアウトします。taureg-mode を使用した Emacs は、明示的に要求されない限り、このコードを再インデントしません。

必要なのは、このような状況で警告を発する lint のようなツールです。これに対する良い提案を待っています。

ありがとう。

0 投票する
3 に答える
438 参照

java - 関数型プログラミング言語が自動メモ化をサポートしているのに、命令型言語をサポートしていないのはなぜですか?

これは、インターネットでランダムに見つけた動的プログラミングに関するいくつかの講義で読んだ質問です。(私は卒業しており、動的計画法の基本を既に知っています)

メモ化が必要な理由を説明するセクションでは、つまり

メモ化を使用しないと、多くのサブ問題が何度も再計算され、複雑さが非常に高くなります。


それから、あるページのメモには答えのない質問があります。これはまさに私が聞きたいことです。ここでは、正確な表現とそれが示す例を使用しています。

自動メモ化: 多くの関数型プログラミング言語 (Lisp など) には、メモ化のサポートが組み込まれています。

命令型言語 (Java など) ではないのはなぜですか?

メモが提供するLISPの例(効率的であると主張しています):

それが提供するJavaの例(指数関数的であると主張しています)


これを読む前は、いくつかのプログラミング言語にメモ化のサポートが組み込まれていることさえ知りませんでした。

注記の主張は正しいですか?はいの場合、命令型言語がそれをサポートしていないのはなぜですか?

0 投票する
2 に答える
223 参照

functional-programming - SICP - 階乗の命令型実装と関数型実装

Racket と Dr. Racket と一緒に SICP の本を勉強しています。以下の講義も見ています。

https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/5a-assignment-状態と副作用/

第 3 章では、著者は命令型プログラミングの概念を提示します。

意味を説明しようとして、関数型プログラミングを使用した階乗手続きの実装と、命令型プログラミングを使用した実装を対比しています。

以下は、関数型プログラミングを使用した反復プロシージャの再帰的定義です。

教授が必須の実装を提示する前に、私は自分自身を試しました。

コマンド「set!」を使用してこのコードに到達しました。

ただし、教授の実装は、私の必須の実装とはかなり異なります。

私の実装と教授のコードの両方のコードは、同じ結果に達します。しかし、それらが同じ性質を持っているかどうかはわかりません。

したがって、私は自問し始めました: 私の実装は本当に不可欠でしたか? 「セット!」を使用するだけです。それを保証しますか?

教授の補助反復関数には引数がまったくありませんが、私はまだ補助反復手順でパラメーターを使用しています。これは私の質問に答える核となるものですか?

ありがとう!SOユーザーは私を大いに助けてくれました!

0 投票する
1 に答える
98 参照

javascript - 不変状態はReactJsの機能的機能ですか?

命令型プログラムの最も重要な機能は、状態とその変更です。

ReactJs は、プログラミングの関数型スタイル (例えば、純度、高階関数の使用など) を奨励しています。ReactJs で不変の状態を使用する場合、この特性は依然として必須の機能であるか、機能的な「状態のスタイル」と見なすことができるかどうかを知りたいですか?

理論的には、React 状態と純粋な命令型プログラムの状態の違いは何ですか?