rx-to-stringएक तर्क के रूप में regexp फॉर्म लेता है। वाक्य-विन्यास उसी के तर्क के समान है rx।
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
आपने जो उत्तीर्ण करने की कोशिश की, वह एक रेग्जिप फॉर्म नहीं है, बल्कि रेगेक्सपी फॉर्म की एक सूची है। के बाद से आप क्या मतलब नियमित अभिव्यक्ति के अनुक्रम है 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\\)\\_>"