問題タブ [s-expression]

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 投票する
3 に答える
1522 参照

c - .Call() で呼び出された C 関数から返される名前付きリスト (SEXP) を作成する方法は?

foo は他の C 関数を.Call("foo", <args>)呼び出し、結果を計算して返します。結果は長さ 3 のリストになり、このリストに名前を付けたいと思います。この目的のために、foo は次のことを行います。

これは、長さ 3 の名前付きリストを作成する正しい方法ですか?

C 関数は確かに R に戻りますが、出力を R の変数に割り当てると、すぐにセグメンテーション違反が発生します。何が間違っている可能性がありますか? 「debug ステートメント」を配置できます (printf("...\n")上記の「return res;」の直前に簡単に配置できます。これらは正常に実行されます。R から呼び出された C コードをデバッグする便利な方法はありますか?

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

bash - s式のjqまたはxsltprocの代替?

Unix の哲学に従って、bash スクリプトを使用して結合された一連の小さなプログラムを含むプロジェクトがあります。彼らの交換フォーマットはもともと次のようなものでした:

:区切られたフィールドはメタデータであり、ASTはスクリプトがそのまま渡す s 式です。cut -d ' 'AST からメタデータを分割し、メタデータcut -d ':'を掘り下げるために使用できるため、これはうまく機能しました。ただし、スペースを含むメタデータ フィールドを追加する必要があったため、この形式が壊れてしまいました。タブを使用するフィールドがないため、次のように切り替えました。

将来、さらに多くのメタデータ フィールドが追加されることを想定しているため、「句読点を推測する」というゲームをプレイするのではなく、より構造化された形式に切り替える時が来たと思います。

区切り文字の代わりに、cutJSON と を使用するjqことも、XML と を使用することもできますxsltprocが、既に AST に s 式を使用しているため、代わりにここでそれらを使用する良い方法があるかどうか疑問に思っています。

たとえば、次のようになります。

私の要件は次のとおりです。

  • 私のプログラムがデータを読み書きする場所であるため、最小限のボイラープレートでstdioを簡単に使用できます
  • シェル スクリプトから簡単に呼び出すことができる、 bash のプロセス呼び出しとパイプライン処理に代わる非常に魅力的な手段を提供します
  • 可能であればストリーミング I/O。すなわち。クロージングを探して入力全体を消費するよりも、一度に 1 つの AST で作業したい)
  • 特に数回呼び出される場合は、高速で軽量です。各 AST はわずか数 KB ですが、合計すると数百 MB になる可能性があります
  • 少なくとも Linux では動作するはずです。クロスプラットフォームはいいだろう

Lisp/Scheme インタープリターを使用するのが当然の選択ですが、私が経験した唯一の方法は Emacs で、これはあまりにも重すぎます。おそらく、別の実装がより軽量でこれに適していますか?

Haskell では、shelly、turtle、atto-lisp をいじりましたが、私のコードのほとんどは、String/Text/ByteString 間の変換、 のラップ/ラップ解除、Lisp独自の 、 、 などの実装carcdr費やさconsれました。

scshについて少し読んだことがありますが、それが適切かどうかもわかりません。

0 投票する
4 に答える
136 参照

clojure - Lisp-family: 引数としてのシンボル呼び出しとシンボルの異なる評価

Lisp ファミリー (EDIT: Lisp-1) 言語で、関数としての位置または引数としての位置に関してシンボル評価を区別する方法はありますか (つまり、いつ評価されるかに関して、このシンボルの eval をオーバーライドします)?
例として(この機能は必要ありません。これは例です)、オブジェクト自体から呼び出すことができるオブジェクトのセットにある種の中置操作を実装したかったのです。

my-obj と引数に関数 some-operator を実際に適用します。
ただし、このオブジェクトがコード内の他の場所で引数として使用されている場合は、次のようになります。

my-obj の値に評価されます。
ありがとうございました。

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

pattern-matching - 型で 'with sexp' を使用すると、「警告 4: このパターン マッチングは脆弱です」が生成されます。

カスタム型でwith sexp構文拡張 (ここここで説明)を使い始めたところです。ただし、そうすると、自分のタイプについて次の警告が表示されることに気付きました。

Warning 4: this pattern-matching is fragile. It will remain exhaustive when constructors are added to type Sexplib.Type.t.

これは、構文によって生成されたSexpコンバーターが Sexp (および)に対して定義された型コンストラクターのみを処理するためであると想定しています。with sexpSexp.ListSexp.Atom

私は通常、コンパイルで警告を修正しようとします。ここでコンパイラを満足させる方法はありますか (すべてのケースで警告を完全に抑制する方法はありません)?

編集: マークダウンの書式設定用。

更新: からサンプル コードを提供しhit.mlます。

次の警告が生成されます。

File "hit.ml", line 6, characters 5-27: Warning 4: this pattern-matching is fragile. It will remain exhaustive when constructors are added to type Sexplib.Type.t.

その他の情報: Macbook (Yosemite) でバージョン 4.02.3 の ocamlc (を介してインストールopam) を使用しており、バージョン 113.00.00 のcoreおよびを使用してcore_kernelいます。-w Acflags にも使用しています。

更新が遅れたことをお詫びします。休日はラップトップ/インターネット接続から私を遠ざけました.

フィードバックをお寄せいただきありがとうございます!

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

java - 括弧を一致させて S 式を解析する方法は?

次のことを行う関数を作成しようとしています。

コード入力が "(a 1 2 (b 3 4 5 (c 6) |7) 8 9)" であると仮定すると、パイプ | 記号はカーソルの位置、

関数は次を返します: カーソルのスコープ内にあるコードを表す文字列 "b 3 4 5 (c 6) 7"

入力に対する文字列の開始インデックスを表す int 8

入力に対する文字列の終了インデックスを表す int 30

まさにそれを返す作業コードがすでにあります。ただし、問題は、コンテキストを追跡しながらコメントを無視することにあります (たとえば、文字列リテラル、独自のリテラル区切り記号など)。

コンテキストを追跡するコードは次のとおりです。

まず、上記の関数を次のように使用します。

第二に、説明の上部に記載されている機能を実行する現在の方法は(疑似コードで)これであるため、これを前方と後方の両方で使用します。

ご覧のとおり、この関数は順方向と逆方向の両方で機能します。または、少なくともそのほとんど。唯一の問題は、この関数を逆方向に使用すると、コメント (標準の ECMA 二重スラッシュ "//" で示される) の適切なスキャンがうまくいかないことです。

リバース コンテキスト アプリケーション用に別の関数を作成し、すべての行で二重スラッシュを再帰的にチェックし、その '//' の後のすべてを COMMENT にする場合 (または、関数の使用方向では、 //より前のすべて)、これを音楽のライブコーディング環境として使用したいので、処理時間がかかりすぎます。

また、そのメソッドを実行しようとする前にコメントを削除することはreturnCodeInScopeOfCursor実行できない場合があります...コードのインデックスとそうでないものを追跡する必要があるためです。コメントを削除すると、すべてのコード位置に大きな混乱が生じ、どこで何を正確に何文字削除したかなどを追跡することになります....私が使用しているテキスト領域入力 GUI (RichTextFX ) は Line-Char 追跡をサポートしていないため、すべてが char インデックスのみを使用して追跡されるため、問題が発生します...

だから...私は現在のコードをどうするかについて完全に当惑しています。ヘルプ、提案、アドバイスなど...大歓迎です。