如何在Common Lisp中同时使用多个变量进行循环?
在Common Lisp的LOOP中同时绑定多个变量
要实现你想要的同时绑定多个变量的循环效果,有几种直接的方法:
方法1:遍历分组后的子列表
如果你的源列表是扁平结构,可以先将其拆分为包含多个目标元素数量的子列表,再通过for (i j k) in语法直接绑定变量:
; 直接使用预分组的列表 (loop for (i j k) in '((1 2 3) (4 5 6)) do (format t "i=~a, j=~a, k=~a~%" i j k))
如果需要自动拆分扁平列表,也可以用loop结合索引步进实现:
(let ((flat-list '(1 2 3 4 5 6))) (loop for idx from 0 below (length flat-list) by 3 do (let ((i (nth idx flat-list)) (j (nth (+ idx 1) flat-list)) (k (nth (+ idx 2) flat-list))) (format t "i=~a, j=~a, k=~a~%" i j k))))
方法2:用on遍历并绑定连续元素
通过for (i j k) on语法,可以直接从扁平列表中一次获取连续的三个元素,同时添加while k来避免剩余元素不足时出现nil:
(loop for (i j k) on '(1 2 3 4 5) while k do (format t "i=~a, j=~a, k=~a~%" i j k))
另外你提到的with语句,它的作用是定义循环内部的局部变量,而非绑定遍历过程中的元素,所以不适合你的需求。
内容的提问来源于stack exchange,提问作者user45744
相关产品推荐
相关产品推荐

