問題タブ [imperative]
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.
variables - 私が命令型プログラミングのバックグラウンドを持っている場合、Haskell で物事を追跡するための動的変数がないという考えに頭を悩ませるにはどうすればよいでしょうか?
だから私はHaskellを独学しようとしています。私は現在、Learn You a Haskell for Great Goodの第 11 章にいて、99 Haskell ProblemsとProject Euler Problemsに取り組んでいます。
物事は順調に進んでいますが、「変数」を追跡する必要があるときはいつでも、常に何かをしていることに気付きます。これらの「変数」をパラメーターとして受け入れ、状況に応じて異なる値を再帰的に供給する別の関数を作成するだけです。例を挙げて説明すると、Project Euler の問題 7 に対する私の解決策は、10001 番目の素数を見つけることです。
私はあなたがアイデアを得ると思います。このソリューションをより効率的にすることができるという事実も無視しましょう。私はこれを認識しています。
ですから、私の質問は 2 部構成の質問です。まず、私は Haskell について間違っているのでしょうか? 私は命令型プログラミングの考え方にとらわれていて、Haskell を適切に受け入れていないのでしょうか? もしそうなら、私が感じているように、どうすればこれを避けることができますか? 私が Haskell のように考えるのに役立つかもしれない、あなたが私に指摘できる本や情報源はありますか?
あなたの助けは大歓迎です、
-アサフ
clojure - 実際の問題に対する必須のソリューションと機能的なソリューションの良い例
数週間後に始まるコースのレッスン資料を書いています。私は学生が学ぶ新しい言語として Clojure を選びました。命令型コードを関数型コードにリファクタリングすることに 1 つの章を割きたいと思います。このために、命令型のソリューションと関数型のソリューションがどのように比較されるかを示すことができる、それほど現実的ではない一連の実際的な問題を用意したいと思います。プロジェクト Euler のように数学に重点を置いた問題ではなく、平均的なプログラマーが定期的に対処する必要がある問題であることが望ましいです。これについての良い情報源を持っているのは誰ですか?
部分的な回答: そのようなソースの 1 つがhttp://langref.org/です。もっと欲しい!
recursion - エラトステネススキームのふるい
私はエラトステネスのふるいをスキームで実装するためにウェブを検索してきました、そして私はたくさんのコンテンツを思いついたけれども、それらのどれも私がそれをする必要があるようにそれを成し遂げたようには見えませんでした。
問題は、ほとんどのアルゴリズムが静的終了を使用するか、反復を使用することです。これは私の言語の知識の欠如と相まって、私はあなた方全員に助けを求めるようになりました。
1つの引数(Sieveまでの数値)を取り、再帰のみを使用し、#t
(true)または#f
(false)の数値の「短所」のリストを持つSieveの実装が必要です。
したがって、基本的にアルゴリズムは次のようになります。
- 2からリストを作成-入力された番号。各番号はtrueから始まります
- 再帰的に調べて、2で割り切れる各数値にfalseをマークします。
- 次に、素数だけがtrueとマークされるまで、リスト内の次の「true」番号に進みます。
- リストを出力する
出力例:
>(erat-sieve 20)
((2。#t)(3。#t)(4。#f)(5。#t)(6。#f)(7。#t)(8。#f)(9。#f)( 10。#f)(11。#t)(12。#f)(13。#t)(14。#f)(15。#f)(16。#f)(17。#t)(18。 #f)(19。#t)(20。#f))
コードを徹底的に説明するコメントもいただければ幸いです。
ありがとうございました!
改訂:::それで、私の質問をさらに説明するためのスキームを少し学びました...
これでリストが作成されます。
これにより、除数の各倍数がfalseとマークされたリストが返されます。
これは私が問題を抱えている関数です。動作するはずです。手動で3回実行しましたが、なぜ必要なものが返されないのかわかりません。
私がやろうとしているのは、関数名が示すように、リストの下でまだtrueとマークされている番号ごとにmark-off-multiplesを呼び出すことです。したがって、パスしてから2を((3.#t)(4.#t)(5.#t))
呼び出しmark-off-multiples
て戻り(3.#t)(4.#f)(5.#t)
、それに追加(2.#t)
します。次に、それ自体が再び渡され(3.#t)(4.#f)(5.#t)
、マークオフ倍数が呼び出され、リストのcdrが返さ(4.#f)(5.#t)
れ、リストを下に移動し続けます...
次に返される出力は、すべてtrueのリストです。
これは、うまくいけば、私の苦境をよりよく理解するのに役立ちます。
f# - F# 命令型コードを関数型コードに変換するアイデアが必要
私は関数魔女が命令型のスタイルで書かれており、それをより堅牢な関数型アプローチに変換する方法について頭を悩ませています。
この関数は一連の文字列を受け取り、各タプルが入力からの 2,7,12,.. および 5,10,15,.. 項目で構成される一連のタプルを返します。
例:
入力 = { "Lorem", "ipsum", "dolor", "set", "amet", "consectetuer", "adipiscing", "elit", "Aenean", "commodo", "ligula", "eget" 、「ドロール」、「アエネアン」、「マッサ」}
出力 = { ("ipsum", "amet"), ("adipiscing", "commodo"), ("eget", "massa") }
出発点の助けやヒントをいただければ幸いです。
asp.net - ASP.NetはMembership.Providerをプログラムで設定しました
構成ファイルではなくコードを使用して既定のメンバーシップ プロバイダー (Membership.Provider) を設定できるかどうかを知りたいです。
assembly - 無制限の精度整数の実装
問題: 「大きな整数は (小さな) 整数のリストとして表されます。」
次があるとします。
この一連の定義は、レジスタ、命令、およびラベル (ジャンプで使用) を使用して、アセンブリのような言語を定義するために使用されます。
次に、命令型言語 (「while」「if」などの命令を含む) から ASM へのコンパイラを実装する必要があります。
私の先生が提案した実装は、11000 が [1, 1, 0, 0, 0] のように、各要素が指定された数字の数字 (数字は整数のみ) であるリストを使用することです。
最初のギャップは次のとおりです: 一般的な O'Caml プログラムを考慮して、これをどのように実装できますか? 大きな整数を挿入する必要があるとします。「計算」を許可するために使用できるロジックは何ですか? 最後に、ASM プログラムは add、sub mul、およびその他の大きな整数を含む可能性のある命令も実行できるため、レジスタ、大きな整数、および命令でこれを処理する方法がわかりません。
私が必要としているのは、おそらく O'Caml 言語で大きな整数を実装する方法と、アセンブリに似た言語 (この場合は ASM) を考慮してこれを実現する方法の一般的なスキームです。
事前に感謝します。明確でない場合は、私の英語で申し訳ありません。誰かが私を助けることができれば、必要に応じて詳細を追加します
performance - haskell の「命令型」アルゴリズムに関連するパフォーマンス
私は Lisp ファミリーの言語のトレーニングを受けており、現在は自分のために Haskell を少し学んでいます。Lisp では、関数型スタイルは問題ありませんが、適切なパフォーマンスを得るために命令型スタイルが必要な場合がいくつかあります。
追加
最初の引数をコピーする必要があるため、追加は低速です (場合によっては、削除に成功したバージョンの 100 倍の速度になります)。解決策は、追加する代わりに、最初のリストの最後のポインターを 2 番目のリストの先頭に移動することです。もちろん、これは破壊的な操作です。
選別
クイックソートの機能的なバージョンは、多くの中間リストを作成します。これは、可能な限り高速にするというアルゴリズムの目的を何らかの形で無効にします。AFAIR、一般的なlispでは、ソートは機能バージョンを持たない唯一の破壊的な関数です。
長さ
リストの長さを取得するにはリスト全体を調べなければならないため、これは Lisp ではコストのかかる操作です。これはそうである必要はありません.afaik clojureはリストの長さを対数時間で計算します. 解決策は、多くの場合、命令型ループでオンザフライで長さを計算することです。
私の質問は、haskell でこれらの問題にどのように対処するかです。
haskell - 命令型プログラミング言語で書かれたプログラムの型チェックのための Haskell プログラムの作成
命令型プログラミング言語で記述されたプログラムを型チェックするために、Haskell でプログラムを記述しようとしています。
抽象構文は次のとおりです。
-- プログラムは一連の変数宣言 (リスト) と一連のステートメント (リスト) です。
-- 変数宣言は型と変数名です
-- タイプは「int」または「bool」、または「int[]..[]」または「bool[]..[]」のいずれかです。
-- ステートメントは次のいずれかです...
-- 式は次のいずれかです...
誰かが私の質問に完全に答える必要はありませんが、これまでに持っているものを提供したいと思います。誰かが私を正しい方向に向けたり、私が完全に間違っているかどうかを教えてくれたりすると、それは非常に役に立ちます.
プログラムを型チェックする関数は typecheck から始まります。typecheck は typecheckstmt を使用して最初のステートメントを型チェックし、typecheckstmtlist を使用してプログラムの残りを型チェックします。次に、これらの関数は typecheckexp を使用して式を型チェックします。明らかに、私は実装の非常に基本的なスケルトンを持っています。私が正しい方向に向かっているかどうか、そして誰かが指針を持っているかどうかを知りたいだけです。
また、何をチェックする必要があるのか についても少し曖昧です。明らかに、変数/式を割り当てて比較する場合は、それらを同じ型にする必要があります。
どんな助けでも大歓迎です。
haskell - 命令型プログラミング言語の表示セマンティクスを計算するための haskell プログラムの作成
Haskell でプログラムを作成して、整数変数、1 次元 (整数) 配列、および関数を使用して命令型言語プログラムの表示セマンティクスを計算しようとしています。私が始めている関数は次のタイプです:
State は次のとおりです。
最初の部分は整数変数の値で、2 番目の部分は特定のインデックスにある配列変数の値です。
プログラムには次のような特徴があります。
progsem は、プログラムの実行後に結果の状態を返します
関数には、整数変数用と配列変数用の 2 つのパラメーター リストがあります。
関数は値の結果によって呼び出されます
命令型言語の抽象構文は次のとおりです。
さて、具体的な質問はありませんが、セマンティクスの書き方について誰かが私を正しい方向に向けることができるかどうか疑問に思っていました.
過去に、配列と関数を使用しない命令型プログラミング言語に対して同様のことを行いました。それは次のように見えました:
州がそのタイプだった場所
私が言ったように、詳細な回答は必要ありませんが、ヘルプ/ヒント/ポインターは大歓迎です。
haskell - オブジェクト間の関係
数週間、私はオブジェクト間の関係について考えてきました - 特に OOP のオブジェクトではありません。たとえば、C++ では、他のオブジェクトへのアクセスが必要な構造内のポインターまたはポインターのコンテナーをレイヤー化することによってそれを表すことに慣れています。オブジェクトA
に へのアクセスが必要な場合、 inB
を見つけることは珍しくありません。B *pB
A
しかし、私はもうC++プログラマーではありません。関数型言語を使用してプログラムを作成しています。特に、純粋な関数型言語であるHaskellを使用しています。ポインタとか参照とかそういうのも使えるんですけど、「Haskellじゃないやり方」とか、ちょっと違和感があって。
それから、私はそのすべての関係についてもう少し深く考え、ポイントに達しました:
「なぜ、このような関係を重ねることで表現するのでしょうか?
私はすでにそれについて考えている何人かの人々を読みました(ここ)。私の見解では、明示的なグラフを介して関係を表現する方がはるかに優れています。これにより、型のコアに焦点を当てることができ、後でコンビネーターを介して関係を表現できるからです (SQL と少し似ています)。
コアとは、 を定義するときに、 が何に依存するかではなく、 で構成さA
れるものを定義することを期待するということA
です。たとえば、ビデオ ゲームで 型がある場合、やその種類について話すのは正当ですが、 や について話す場合はどうなるでしょうか。もうよくわかりません。それで:Character
Trait
Skill
Weapon
Items
私にはデザインの面で本当に間違っているように聞こえます。私はむしろ次のようなものを好むだろう:
さらに、新しい機能を追加する日が来たら、新しいタイプ、新しいグラフ、およびリンクを作成するだけです。最初の設計では、型を壊すCharacter
か、何らかの回避策を講じて拡張する必要がありました。
その考えについてどう思いますか。純粋関数型言語であるHaskellでそのような問題に対処するには、何が最善だと思いますか?