eal*_*nso 3 sbcl common-lisp cl-ppcre
我一定在这里缺少一些非常基本的东西。
我需要从常见Lisp中的匹配项中提取捕获组。当我评估解释器(sbcl实现)时:
`(cl-ppcre::scan-to-strings ".*?(\\d).png" "sample1.png")`
Run Code Online (Sandbox Code Playgroud)
我得到:
"sample1.png"
#("1")
Run Code Online (Sandbox Code Playgroud)
但是,如果我将该表达式绑定到一个值,请说
`(setq number (cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))`
Run Code Online (Sandbox Code Playgroud)
number的值变为"sample1.png"
。如何获得"1"
打印的?
你在找
(setf (values match position)
(cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))
Run Code Online (Sandbox Code Playgroud)
常见的lisp函数可以返回多个值。这对应于其他语言(例如Python)的“元组”返回值。因此,当一个Lisp函数(例如floor
)返回多个值时,Python用户将编写类似
(f,r) = floor(10,3)
Run Code Online (Sandbox Code Playgroud)
和floor
(通常)分配一个元组,当你写时捕获fr = floor(10,3)
。
CL多个值不会分配额外的存储,但是除非您特别要求,否则这些额外的值将被丢弃:
(setf (values f r) (floor 10 3))
Run Code Online (Sandbox Code Playgroud)
将捕获两个值,但(setf f (floor 10 3))
将丢弃r
。