rx-to-stringใช้แบบฟอร์ม regexp เป็นอาร์กิวเมนต์ rxไวยากรณ์เป็นเช่นเดียวกับข้อโต้แย้งของ
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
สิ่งที่คุณพยายามผ่านไม่ใช่แบบฟอร์ม regexp แต่รายการแบบฟอร์ม regexp เนื่องจากสิ่งที่คุณหมายถึงคือลำดับของนิพจน์ทั่วไปที่symbol-startตามมาด้วยหนึ่งในสตริงที่ตามมาsymbol-endคุณจึงต้องนำด้วยตัวดำเนินการลำดับsequence(ซึ่งสามารถย่อseqหรือ:หรือแปลกandเกินไป)
(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"
rxอันที่จริงแล้วเสื้อคลุมเล็ก ๆ รอบตัวrx-to-stringที่ทำงานในเวลารวบรวมเพราะมันเป็นมาโคร สิ่งที่ทำให้เกิดความสับสนนี้คือถ้าคุณส่งอาร์กิวเมนต์หลายตัวไปให้rxคุณจะมีsequenceโอเปอเรเตอร์โดยนัย เอกสารของrxอาจจะชัดเจน
(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"