我一定是错过了一些非常基本的东西。
我需要从一个普通的lisp的匹配中提取一个捕获组。当我在解释器( sbcl实现)中评估时:
`(cl-ppcre::scan-to-strings ".*?(\\d).png" "sample1.png")`我得到:
"sample1.png"
#("1")但是如果我将这个表达式绑定到一个值,比如说
`(setq number (cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))`数字的值变成"sample1.png"。如何获得已打印的"1"?
发布于 2014-06-23 04:11:30
你的问题
你在找
(setf (values match position)
(cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))另见multiple-value-bind等人。
在引擎盖下面
常用的lisp函数可以返回多重值。这对应于其他语言(如Python )中的"tuple“返回值。因此,当lisp函数(如floor )返回多个值时,Python用户将编写如下
(f,r) = floor(10,3)floor将(通常)分配一个元组,在编写fr = floor(10,3)时捕获这个元组。
CL多个值不会分配额外的存储空间,但除非您特别要求额外的值,否则额外的值将被丢弃:
(setf (values f r) (floor 10 3))将捕获这两个值,但(setf f (floor 10 3))将放弃r。
https://stackoverflow.com/questions/24358075
复制相似问题