rx-to-stringmengambil bentuk regexp sebagai argumen. Sintaksnya sama dengan argumen dari rx.
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
Apa yang Anda coba lewati bukanlah formulir regexp, tetapi daftar form regexp. Karena yang Anda maksud adalah urutan ekspresi reguler symbol-startdiikuti oleh salah satu dari sekelompok string diikuti oleh symbol-end, Anda harus memimpin dengan operator urutan sequence(yang dapat disingkat menjadi seqatau :, atau bahkan aneh and).
(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"
rxsebenarnya pembungkus kecil di sekitar rx-to-stringyang beroperasi pada waktu kompilasi karena makro. Apa yang membuat ini membingungkan adalah bahwa jika Anda melewati beberapa argumen rx, ada sequenceoperator implisit . Dokumentasi rxdapat diklarifikasi.
(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"