問題タブ [ocaml]
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.
f# - パターン マッチングとスイッチの説明
switch ステートメントとパターン マッチング (F#) の違いを何人かの人に説明しようとしてきましたが、うまく説明できませんでした..ほとんどの場合、彼らは私を見て「なぜif..then..else だけを使用しないでください。
彼らにどのように説明しますか。
編集!すばらしい回答をありがとうございます。複数の正解をマークできればと思います。
macros - OCaml のレコード フィールドの更新を一般化できますか?
私は非常に初心者の OCaml プログラマーなので、これがばかげた/明白な質問である場合はご容赦ください。吸収すべきことがたくさんあり、ドキュメントでこれを見逃している可能性があります。
次のようになり始めているコードのベースがあります。
次のようなものを書きたいので、重複が私を悩ませ始めています:
この方法で x を更新すると、次のように簡単に呼び出すことができます。
これは「マクロ!」と呼びます。しかし、OCaml にマクロ システムがあるとは思えません。他に何ができますか?
installation - GODI インストール エラー
私は Fedora 9 x86_64 を実行しており、多かれ少なかれ Linux の初心者です (使用していませんが、インストールなど)。エラーは、ブートストラップの第 2 段階 (つまり、「./bootstrap_stage2」) で発生します。それは多くのことを行い、その後これらのエラーが発生し始めます:
私はそれを実行してメモリを監視しましたが、間違いなく不足していないと言えます(約500を使用して3を取得しました)。それで、誰が問題が何であるか知っていますか?私はネットを検索しましたが、私が見つけた唯一の他の同様のものは、ここの他のスレッドでした(ただし、別のエラーがありました)
前回インストールしたときは問題なく動作したので、どんな助けも大歓迎です。
ocaml - 私の SHA256 の OCaml 実装は正常ですか?
私は初心者の OCaml プログラマーであり、非常にトリッキーなアルゴリズムを実装しようとして、自分自身を深いところに投げ込むと思っていました。私は、文体、セキュリティ、またはパフォーマンスに関連するものであっても、大小を問わずすべての批判を受け入れます。
私がすでに認識している批判の 1 つは、アルゴリズムではメッセージ全体がメモリに収まる必要があるということです (一方、SHA256 の参照実装では一度に 1 つのブロックを処理できます)。
再帰関数のいずれかが末尾再帰でないかどうかが特に心配です。
コードをテストしたところ、x86_64 Linux で適切なメッセージ ダイジェストが生成されます。
ご検討いただきありがとうございます。
編集:
何も飛び出さない場合は、ここであまり時間をかけないでください。書き換えではなく、明らかに壊れた動作を探しています。
したがって、別のファイルで定義されているパック関数は次のとおりです。
ocaml - Pythonのrange関数に相当するOCamlのイディオムは何ですか?
1 から までの整数のリストを作成したいと思いますn
。Python では を使用しrange(1, n+1)
、Haskell では: を使用してこれを行うことができますtake n (iterate (1+) 1)
。
これに対する適切な OCaml イディオムは何ですか?
pattern-matching - OCaml: 別の式の中で式を一致させますか?
私は現在、OCaml を使用した小さなプロジェクトに取り組んでいます。単純な数式の簡略化。式の中に特定のパターンを見つけて、それらを単純化して、式内の括弧の数を減らすことになっています。これまでのところ、再帰的なパターン マッチングの「フィルター」関数を作成することにした 2 つのルールを除いて、ほとんどのルールを実装できました。実装する必要がある 2 つのルールは次のとおりです。
- a - (b + c) または類似の形式のすべての表現を a - b - c に変換します。
- a / (b * c) または類似の形式のすべての式を a / b / c に変換します。
...これはかなり単純だと思います。1 つを実装できたら、もう 1 つを簡単に実装できます。しかし、再帰的なパターンマッチング機能に問題があります。私の型式はこれです:
そして、私が主に問題を抱えているのは、マッチ式にあります。たとえば、次のようなことを試みています。
ただし、マークされた行の一致式は、「プリンシパル一致」ではなく、以前の「内部一致」の一部として認識されているようで、すべての「Quot(...)」式が認識されることはありません。このような他の一致式の中に一致式を含めることさえ可能ですか? そして、他の可能性とのマッチングを続けることができるように、内側のマッチングを終了する正しい方法は何でしょうか?
ロジックは無視してください。これはほとんど私が最初に思いついたものです。再帰性またはロジックは大歓迎です。
map - OCaml には一般的な map()/reduce() 関数がありますか?
Python map() では、シーケンス プロトコルに従うすべてのデータに対して機能します。文字列、リスト、またはタプルのいずれをフィードしても、正しいこと^TMを実行します。
私のケーキも OCaml に入れられませんか? 使用しているコレクション型を調べて、対応する List.map または Array.map または Buffer.map または String.map を見つける以外に、本当に他に選択肢はないのでしょうか? これらのいくつかは存在さえしません!私が求めているのは異常ですか?私は何かが欠けているに違いない。
parsing - 良いocamlパーサー?
flex/bisonの派生物ではない優れたocaml解析ライブラリを探しています。理想的には、パーセクの線に沿ったモナディックコンビネータライブラリが欲しいのですが、何も見つかりません。
私はhaskellを使用しますが、haskellのllvmバインディングを作成することは、私が当初考えていたよりも面倒です。
乾杯、
デュアン
macos - Mac OS X で ocaml を実行するとバス エラーが発生する
Mac OS X に Ocaml をインストールしたところ、ocaml プログラムを実行すると「バス エラー」が表示され、他に何が起こっているのか手がかりがありません。ここからどこへ行くべきかについて誰でも提案できますか?
編集:
パッケージ経由でインストールしました:
http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2-ppc.dmg
(私は iBook G4 を持っているので、PPC が適切です)
ocaml を実行するには、次のように入力しました。
端末ウィンドウで
私も試しました
xterm ウィンドウから実行します。3つすべてが与えます:
README で要求されているように、Xcode と X11 をインストールしました。
lua - OCaml に Lua を埋め込む
OCaml に組み込まれた Lua の使用方法を示すコード スニペットを教えてください。
簡単な例としては、"Hello, World" バリアントが考えられます。OCaml でユーザーに名前の入力を求めるようにします。次に、その名前を Lua 関数に渡します。Lua に挨拶を出力させ、名前の長さを返します。次に、OCaml に名前の長さに関するメッセージを表示させます。
例:
user@desktop:~$ ./hello.opt
名前?ユーザー
こんにちは、ユーザーです。
あなたの名前は4文字です。
user@desktop:~$
[編集]
非 C プログラマーとして、Lua と OCaml の間でデータを渡すための中間 C プログラムを作成することなく、これを実装できますか?
以下は、私が試してみたいことの理論的な考えです。残念ながら、ocaml_hello.ml の 3 行目は、コードを有効にするために lua_hello.lua で定義された関数を呼び出す方法を知る必要があります。
lua_hello.lua 引数を出力してその長さを返す lua_hello を定義します。
ocaml_hello.ml OCaml は名前の入力を求め、Lua 関数を呼び出し、戻り値を出力します。