問題タブ [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.
functional-programming - 普遍的なデータ型表現としてのリストの欠点は何ですか?
Lisp プログラマーは、他のすべてのデータ型を表すためにリストを使用する傾向があります。
しかし、リストはデータ型の普遍的な表現として適切ではないと聞いたことがあります。
レコードを使用する場合とは対照的に、この方法でリストを使用することの欠点は何ですか?
c++ - OOP で S 式を解析する正しい方法
S式リーダーを実装する方法を探しています(後でSchemeインタープリターとコンパイラーの両方で使用されます)が、ASTをどのように記述すればよいか(もしあったとしても)自問自答しています。
私は SICP を読んできました。これは、Scheme 内からは非常に簡単ですが、インタープリターとコンパイラーを C++ でオブジェクト指向の方法で実装しようとしています。
私は学習目的でのみこれを行っていることに注意してください。そのため、これを行う最も簡単で迅速な方法を実際に探しているのではなく、正しく再利用可能な方法を探しています。
いくつかの Scheme 実装で、人々が s 式を解析して、次のようなコンス セルを簡単に出力するのを見てきました。
そして、Scheme の種類ごとに 1 つの Sexpr のサブクラスAtom
、またはそれらに沿った何か。
よくわかりませんが、これはハックのように思えます... この作業は、読者ではなく通訳者が行うべきではありませんか?
私が知りたいのは、これが S 式を読む最良の (または正しい) 方法であると考えられるか、それともパーサーよりもインタープリターの仕事ですか? パーサーは、コンス セルに依存するのではなく、独自の AST を持つ必要がありますか?
xml - LISP で任意の区切り文字を使用して S 式を解析する
(私は Lisp に慣れていないので、これを行う方法を知りませんが、簡単な方法があるに違いないことは十分に知っています。)
私が最近読んだ記事に興味をそそられました。この記事では、ログ ファイルを Lisp スタイルの S 式として保存することを提唱していたので、ログ ファイルを簡単に DSL に変換することができました。これにより、他の DSL の同様の文法について考えるようになりましたが、問題が発生しました。
区切り文字が括弧である s 式の解析は簡単です
ファイル/ストリームから読み取って簡単に評価できます。
そして、XML が本当に単なる S 式である場合、次のように単純なものを変換する簡単な方法があるはずではありませんか?
の中へ
文字列操作のテクニックを使って、この動作を偽造することができます (実際、正規表現でこれを処理できます)。しかし、それは Lisp への冒涜のように思えます - これらはただの S 式です! 同じことが、lex/yacc の Lisp ベースのバージョンにも当てはまります。より複雑な構文が必要であることは理解できますが、実際には、これは非効率的な方法で偽装された Lisp 構文にすぎません。
理論的には、これは XML を超えて、Lisp 文法の準同型である任意の文脈自由文法に拡張されるはずです。(Lisp はおそらく S 式のように単純な文脈自由文法では完全に定義されていないことを知っていますが、明らかに後者は前者の厳密なサブセットであるため、私の主張は依然として有効です)。
要するに、 S 式 (たとえば XML など) に準じた文脈自由文法の構文を定義し、Lisp (または Lisp ベースの DSL) 内でその文法を解析する簡単な方法はありますか?
lisp - 構文式とは
私は本「Land of Lisp」を読んで、著者が言及していますsyntax expression
。それは、構文をデータ形式として表現できるということですか? S-expression
(記号式)と同じですか?
emacs - S-Expression (レキシカル スコープ) 内の変数名を検索して置換しますか?
Paredit を有効にして emacs を使用する。LISP (Clojure) S 式を検索して変数の名前を変更するにはどうすればよいですか? グローバルではなく、現在の S 式内で実行したいと思います。
c++ - boost::proto を使用した s-expression の構築
boost::proto
次の端末を使用して s 式オブジェクトを構築しようとしています。
そしてそれを次のように使用します:
ただし、これはコンパイルできません。
私は何を間違っていますか?を使用してs式に類似または同等のものを取得する方法について何か提案はありますboost::proto
か?
list - Lisp: リストと S 式
私はLispが初めてです。「リスト」と「S 式」という 2 つの用語に遭遇しました。私はそれらを区別することはできません。それらは Lisp の単なるシノニムですか?
emacs - sexpとEmacsのリストの違いは?
Emacsには、括弧(または任意の括弧)で区切られた式間でカーソルを移動するコマンドがあります。つまり、forward-sexp、backward-sexp、forward-list、backward-listです。Lispや他のコードでは、それらは同じように動作するので、コメントや引用符の中で最後のものが機能しないことを除いて、*-sexpと*-listの間に違いは見られません。
sexpコマンドとlistコマンドの機能の違いは何ですか?いつどちらを使用する必要がありますか?
念のため、up-listコマンドとdown-listコマンドを理解していますが、これらはトピックとは無関係です。
ruby - ruby_parser、1.8.7より前のAST、RubyのS式の使い方は?
最近、Ruby 1.8.7 で ParseTree を使用する ror プロジェクトを ruby 1.9.3 に変換しています。
ParseTree は 1.9.3 では動作しないことが判明し、多数の Google 社員で検索しましたが、まだコードの移行が残っています。
ruby_parser、sourcify、parse_tree_reloaded などのさまざまな代替手段が見つかりました...
それらにはすべて制限があります。たとえば、sourcify は動的分析の解析を行うことができません。評価の使用。
これらすべてを調べて、Ruby コミュニティでの AST/Parsing/SExp の最適な使用方法と、AST パスを選択しない場合の Ruby 1.9.3 での代替手段を知りたいと思いました。
いくつかのユースケースのポインタをいただければ幸いです。
ありがとう。
common-lisp - Common Lisp: 数式を入力するためのより簡単な方法はありますか?
私は Common Lisp を楽しんでいますが、次のような単純な数式を入力するのが本当に苦痛な場合があります。
(確かにこれを変換できますが、ちょっと遅いです。最初に (+ () ()) を書き、次に各ブラケットに (* () ()) を入れます...)
ここで誰かがこれを入力するより良い方法を知っているかどうか疑問に思っています。私は数学マクロを書くことを考えていました。
に展開します
しかし、名前が長い変数の解析は問題です。
誰かがより良い提案をしていますか?