ヒアドキュメントまたはElispの同等の複数行文字列構文?


10

common-lispにはライブラリcl- heredocがありますが、EmacsLispに同等のものはありますか?


Emacs Lispにはリーダーマクロがないので、頭から離れて「いいえ」と言いますが、ありません。しかし、もしあなたがこれらをどうするつもりかについても詳しく述べていたら、代替のアプローチがあるかもしれません。
wvxvw 2015年

1
@wvxvw複数行の引用符で囲まれた文字列を使用して、おそらく私が必要なことを実行できます。内部の引用符をエスケープするだけが唯一の苛立ちです。
ocodo 2015年

3
まあ、ELispでは文字列は複数行です。引用符内で引用符を処理する1つの方法は、のようなものを使用することです(format "next word is quoted %S" "word")
wvxvw 2015年

@wvxvw%Sがそれをしたことを知らなかったので、やってみます。理想的な音に感謝します!それを答えにして、私はそれを受け入れます。
ocodo 2015

"%S"はCL format ~sディレクティブ(つまりprin1)とよく似ています。したがって、引用符を含む文字列の場合、リーダーに適した方法で引数を出力します。
wvxvw 2015

回答:


6

通常のEmacs Lisp文字列は複数行に対応しています。単に改行を入れることができます。

をちらりと見るとcl-heredoc、探しているのは「生の」文字列のようです。しばらくの間、これらを追加してelispするという提案がありましたが、残念ながら拒否されました。(私はそれが復活することを期待するのではなく願っています。)また、elispにはこれを実装するために必要なリーダー拡張機能もありません。


ユーザー定義リーダーマクロのトピックが最後に登場したとき、誰もが賛成しているようでした。だから唯一の障害は人間の努力だと思います。
マラバルバ2015

2

emacsをinit.elファイルで構成する場合は、代わりにinit.orgの使用を検討してください

次に、次のような構成を使用できます。

#+NAME: arbitrary-text
#+begin_src xml
<some>
  <random src="xml">or whatever... includes syntax highlighting!</random>
</some>
#+end_src


#+begin_src emacs-lisp :var arb-text=arbitrary-text
(eval `(defun a-test ()
         (format "whoop there it is: %S" ,arb-text)))
#+end_src

生成された.elファイルを見ると、次のようなものが表示されます。

(let ((arb-text "escaped text here..."))
  (eval `(defun a-test ()
           (format "whoop there it is: %S" ,arb-text))))

テキストとコードは任意の順序で配置できます。組織リスト、テーブルなどに名前を追加できます。

これが、コラボレーターに「文芸的プログラミング」の使用を強制したくない可能性があるライブラリ用である場合は、コードの大部分を.elファイルに入れ、.elOrgを使用して補助ファイルを生成できます-生成されたコードをリビジョン管理にチェックインします。


3
多分私は何かが足りないのですが、init.orgが複数行の文字列とどう関係しているのかわかりません。
マラバルバ2015年

1
@Malabarba:tl; dr:org-modeでelispを書くと、ヒアドキュメントを連想させる何かを実行できます。それ以外の場合は、複数行の文字列リテラル内のいくつかのものをエスケープする必要があります-ほとんどは` and 「 `、iirc」
SamB

これは問題の興味深い方法ですが、私の場合は少し複雑すぎます。
ocodo 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.