rx-to-stringargüman olarak normal ifade formunu alır. Sözdizimi, argümanıyla aynıdır rx.
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
Geçmeye çalıştığınız şey normal ifade formu değil, normal ifade formlarının listesidir. Ne demek istediğiniz düzenli ifadeler dizisi ve symbol-startonu takip eden bir dizi dizge symbol-endolduğu için, dizi işleciyle sequence( seqveya kısaca :veya garip bir şekilde kısaltılabilir and) yönlendirmeniz gerekir.
(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"
rxaslında rx-to-stringderleme zamanında çalışan küçük bir sargıdır çünkü bir makrodur. Bu kafa karıştırıcı kılan şey, eğer birden fazla argüman rxiletirseniz, örtük bir sequenceişleç olmasıdır. Dokümantasyonu rxaçıklığa kavuşturulabilir.
(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"