問題タブ [quasiquotes]
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.
r - R メタ プログラミング: 関数呼び出しで論理式を貼り付ける
論理式を貼り付ける機能が欲しい
また、(関数呼び出しではなく) 回旋中に遅延引用符を外し、理想的にはどちら側を制御したいと思いますか?
最初の目標に向かって私が得た解決策は次のとおりです。
と
どちらも予想通りです。
このコードを改善して 2 番目の目標 (返された式で引用符を外す) を達成する方法についていくつか質問があります。
Q1 . else {...}
最後のクロージャのこの部分では:
!!
演算子をラップするか、UQ
関数を使用するには、素数記号を使用する必要があります。単純に、!!(dispatch(sep))
または完全な関数定義をこのように指定すると
エラーを返します
グローバル環境でのテスト
エラーなしで正常に動作し、 を返しますTRUE
。では、なぜ私のコードではこれが機能せず、使用する必要があるの<prime>!!<prime>
でしょうか?
Q2 . 論理演算子の前置機能バージョンを使用する必要があるため、最終的な式は への再帰関数呼び出し.Primitive("&")
です。
関数の外部からシンボルとして&
andを渡す方法はありますか?|
expr(a == b & c > q & f < g)
&
関数本体と|
一緒に、ensym
または関数本体内でラップするだけで、enexpr
次のようなエラーが発生します。Error: unexpected '&' in "expr(&"
Q3 . このソリューションは、次のような返された式内での引用符の解除をサポートしていません。
それぞれdots[[i]]
が単一の式であるため、a == b
これ以上分解して操作することはできませんでした。引用されていない側を定義することは、達成するのがさらに困難です。これを達成する簡単な方法はありますか?
scheme - quasiquote を使用して作成されたリストを変更することは合法ですか?
私の理解では、次を使用して作成されたリストを変更することは合法ではありませんquote
。
を使用して作成されたリストはどうquasiquote
ですか? を使用して作成されたリストを変更することは合法quasiquote
ですか?
r - tibble のすべての列に mutate を一般化する
このコード行をティブルのすべての列に一般化したいと思います。
したがって、入力としてn列のティブルを受け取り、n-1回の連結col1name_col1content、col2name_col2content、および最後の列との別の連結を適用する関数を考えています。
従来の if ステートメントを使用して、すべての列を反復処理できると思います。しかし、整頓されたスタイルで行う方がはるかに優れています. ここpurrr
で必要だと思いますが、うまくいきません。
また、gender_masculine など、列の内容の前に列名を毎回取得するには、必ず準引用符が必要です。
haskell - 実行時に QuasiQuoter をコンパイルするには?
Haskell のソース コードだけでなく、スタンドアロン アプリケーションとしても役立つ「QuasiQuoter」があります。したがって、QuasiQuoter を実行できる必要があります。
- Haskell でのコンパイル時 -
[myGrammar|someCommand|]
- シェルの実行時 (実行時コンパイル) -
mygrammar 'someCommand'
最初の部分は簡単ですが、2 番目の部分は、ランタイムから生成されたコードを使用してコンパイラを呼び出すように解決すると、少しぎこちないかもしれません。
ソースコードだけを受け入れず、代わりに QuasyQuoter データ型を受け入れる Haskell の優れたメソッドを使用して、問題の 2 番目の部分を解決したいと思います。しかし、そのようなコンパイル方法は見つかりません。
何でも知ってますか?ありがとう。
使用例
ハスケル
この関数はタプル [(a,b,c,d,e)] を受け取り、文字列と積のリストを返します。
バッシュ
このコマンドは、少なくとも 5 つの数値列を含む stdin csv から読み取り、製品のリストを返します (1 行に 1 つ)。