loopCommon Lisp中的工具允许使用多个价值累积条款maximize.
现在,它也可以提供可变var的maximize条款:
(loop for x from 0 to 10 maximize (func x) into var)
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有可能作为var一个新的局部变量引入let?
一个示例场景是:
(let ((var -1)) ; assume numeric result
(loop for x from 0 to 10 maximize (func x) into var))
Run Code Online (Sandbox Code Playgroud)
x具有数值并不重要,仅用于说明目的.
假设您有一个列表列表,例如'(("abc" "def" "ghi") ("012" "345" "678") ("jkl" "mno" "pqr"))或'(("ab" "cd" "ef") ("01" "23" "45")).
压缩给定列表中列表的规范方法是什么?即如何func定义如此
(func '(("ab" "cd" "ef") ("01" "23" "45")) :sep "|" :combiner #'concat)
;; => ("ab|01" "cd|23" "ef|45")
(func '(("abc" "def" "ghi") ("012" "345" "678") ("jkl" "mno" "pqr")) ...)
;; => ("abc|012|jkl" "def|345|mno" "ghi|678|pqr")
Run Code Online (Sandbox Code Playgroud)
哪个concat := (lambda (args) ...)是组合各个列表的头部的功能.
据推测,这种类型的操作被称为旋转或zipMany(根据不同语言的相关问题的答案).
我有类似的东西(双apply)
(apply #'mapcar #'(lambda (&rest args) (apply #'concatenate 'string args)) lst) …Run Code Online (Sandbox Code Playgroud) 在这个示例代码中
(defvar mat (make-array (list 5 3)
:initial-contents '((1 2 3)
(4 5 6)
(7 8 9)
(10 11 12)
(13 14 15))))
(defun mk-idx (dims dim)
(loop
for i below (length dims)
if (= i dim) collect 1
else collect 0))
(defun loop-over-dim (ary dim)
(macrolet ((expan (a d)
(let* ((dims (array-dimensions a))
(dim-max (nth d dims))
(sel (mk-idx dims d))
(i (gensym)))
`(loop
for ,i below ,dim-max
collect (aref ,a ,@(substitute i 1 sel))))))
(expan ary dim)))
Run Code Online (Sandbox Code Playgroud)
我尝试访问一个一维固定的矩阵(当前在 …