問題タブ [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 投票する
2 に答える
8174 参照

python - PythonでのS式の解析

Lisp式の評価方法と同様に、Pythonでシンボリック式を解析および操作するために使用できるPythonモジュールはありますか?

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

expression-trees - プレフィックス表記で式を評価する方法

プレフィックス表記で式を表すリストを評価しようとしています。このようなリストの例を次に示します。

リストの価値を評価するための最良の方法は何ですか

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

python - この画像処理コードを最適化して、メモリ使用量を削減できますか?

「(add (sub 10 5) 5)」のような文字列 s 式を受け取る python 関数があります。ここで、「add」と「sub」は実際には画像処理関数であり、文字列で表される画像を評価して作成します。画像処理関数は、定数、変数、またはその他の画像 (ベクトルのリストとして表される) を受け取り、同じ方法で表される画像を返します。PIL は、ベクトルのリストとして表されるイメージをイメージ ファイルに変換するために使用されます。

接頭表記の s-expressions を評価するには、s-expr をリストに変換し、それを逆にして、関数が見つかるまでトークンを繰り返します。関数が見つかると、画像処理関数が実行され、結果の画像が関数とそのリスト内の引数。これは、最終的なイメージであるリストに 1 つの要素だけが残るまで行われます。

画像処理関数は単純です。ほとんどの場合、画像内の各 (r、g、b) 値に対して何らかの数学演算を実行します。

問題は、より複雑な表現のために適切なサイズの画像を作成したい場合、コンピューターが停止することです。これを最適化してメモリ使用量を減らすことはできますか?

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

html - XML、S 式、およびスコープの重複...それは何と呼ばれますか?

私はXML is not S-Expressionsを読んでいました。XML スコープは、S 式と同様に厳密です。そして、私が見たすべてのプログラミング言語では、次のことはできません。

<b>BOLD <i>BOTH </b>ITALIC</i>==太字 両方 斜体

S 式でも表現できません。

(bold "BOLD" (italic "BOTH" ) "ITALIC" )== :(

この種の「重複」スコープをサポートするプログラミング言語はありますか? 実用的な用途はありますか?

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

lisp - 解析ツリーを操作するにはどうすればよいですか?

私は自然言語解析ツリーをいじり、さまざまな方法でそれらを操作してきました。私はスタンフォード大学の Tregex ツールと Tsurgeon ツールを使用してきましたが、コードがごちゃごちゃしていて、ほとんどが Python である私の環境にはうまく適合しません (これらのツールは Java であり、微調整には適していません)。より多くの機能が必要なときに簡単にハッキングできるツールセットが欲しいです。ツリーでパターン マッチングを実行し、一致したブランチを操作するのに適したツールは他にありますか?

たとえば、次のツリーを入力として使用したいと思います。

および (これは単純化された例です):

  1. ラベル NP を持つ最初の子、"Bank" という名前のいくつかの子孫、およびラベル PP を持つ 2 番目の子を持つ、ラベル NP を持つ任意のノードを見つけます。
  2. それが一致する場合、PP ノードのすべての子を取得し、それらを一致した NP の子の最後に移動します。

たとえば、ツリーの次の部分を見てください。

そしてそれをこれに変えます:

私の入力ツリーは S 式であるため、Lisp を使用することを検討しました (私の Python プログラムに組み込まれています)。

パターンを説明する良い方法は何でしょうか? 操作を説明する良い方法は何でしょうか? この問題について考える良い方法は何ですか?

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

javascript - Javascript を解析し、Javascript または Ruby で結果を読み取るためのツールは何ですか?

Javascriptのコード分析をしたいと思います。私はASTまたはS-Expressionを操作したいと思います。V8エンジンがこれを構築する可能性は確かにありますが、Javascriptコンテキストからこの情報にアクセスする方法に関するドキュメントを見つけることができないようです.

Ruby で分析を行うことはまったく問題ありませんが、それを実行する唯一の方法は、Treetopまたは同様のパーサー ジェネレーターで文法全体を記述することです。

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

xml - XML の XPATH とは何か、s 式用のものはありますか?

可能であれば、common-lisp impl を探しています。(また、sexp を XML に変換して、結果に xpath を使用したくありません。)

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

php - PHP での s 式の解析

さて、2 つのテキストファイルを解析する必要があります。1 つは Item.txt という名前で、もう 1 つは Message.txt という名前のゲーム サーバーの構成ファイルです。Item にはゲーム内の各アイテムの行が含まれ、Message にはアイテム名、説明、サーバー メッセージなどが含まれます。理想的ですが、これが機能する方法や形式を変更することはできません。

アイデアは Item.txt にあります この形式の行があります

(item (name 597) (Index 397) (Image "item030") (desc 162) (class general etc) (code 4 9 0 0) (country 0 1 2) (plural 1) (buy 0) (sell 4) )

$item397 (インデックス) に等しいphp 変数がある場合、最初に「名前」(597) を取得する必要があります。

次に、Message.txt を開いてこの行を見つける必要があります

( itemname 597 "Blue Box")

次に、「Blue Box」を変数として PHP に返します。

私がやろうとしているのは、アイテムのインデックスでアイテムの名前を返すことです。

これはおそらく非常に基本的なものであることはわかっていますが、何十ものファイル操作チュートリアルを検索しましたが、必要なものが見つからないようです。

ありがとう

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

haskell - s-expr 印刷関数のバグ

Haskell のスキルを練習するために、Write Yourself a Schemeチュートリアルに従っています。S 式のパーサーを実装しましたが、印刷機能に問題があります。

次のプログラムを実行すると

s-式を正しく解析しますが、shows代わりに独自の式を定義するderivingと、ネストされたリストとベクトル内のリストに対して誤った出力が得られます。

ただし、他のケースとネストされたベクトルは正常に機能します。

の表現をandの代わりにandコンストラクターLispValを含めるように変更しました。これは、Scheme データ モデルとの適合性が高いためです。リストの印刷はNilPairListDottedList

エラーは にあると思われますが、わかりshowsPairません。

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

algorithm - セットと二分探索木を使用したS式の解析と構築

これは疑似宿題です(追加のクレジットです)。単語を含む(別の場所に格納されている)行を指す単語のインデックスであるBSTがあります。and(&)and or(|)を組み合わせることができるように、S式を使用して検索する方法を実装する必要があります。

コマンドプロンプトで、ユーザーは次のように入力できます。

QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))

基本的に、これは、fire、forest、waterという単語を含むすべての行と、海、ボート、および水を含むすべての行を返す必要があります。

私が本当に助けを必要としているのは、実際のコードよりも式を適切に表現するために、ノードを解析してツリーに挿入するためのロジックです。私が理解できる唯一のことは、式の各単語の一連の行を返すことです。次に、それが「or」または「and」操作であるかどうかに応じて、それらのセットに対して和集合または交差型の操作を実行して、新しいセットを作成し、それをツリーに渡します。

式を含む行を解析する方法に少し迷っています。いくつか考えた後、サブ式の1つから「遠い」方が、私のs式ツリーでより高いはずであるように見えますか?式を解析してツリーに挿入する限り、正しい方向にプッシュできれば大丈夫だと思います。

上記のクエリ用に思いついたサンプルツリーは、次のようになります。

これは、火がすべて火を含む行のセットを返し、森がすべて森を含む行のセットを返すため、理にかなっています。次に、「&」レベルで、これら2つのセットを取得し、両方のセットに含まれる行のみを含む別のセットを作成します。これにより、火と森の両方を含む行のみを含むセットが得られます。

私の他のつまずきは、構文解析のハードルを克服した後、ツリー内のすべてを表現する方法です。ExpTree(BST)のノードとして機能するExpTreeNodeクラスがあり、次に演算子とオペランドの2つのサブクラスがありますが、これが適切なアプローチかどうかはわかりません。