Lee Mac 发表于 2022-7-5 19:32:54

还有一个:
(defun div ( d l / m r )
   (foreach x l
       (if (= x d)
         (if   m (setq r (cons (reverse m) r) m nil))
         (setq m (cons x m))
       )
   )
   (reverse (if m (cons (reverse m) r) r))
)
_$ (div "sep" '("a" "b" "c" "sep" "d" "e" "f"))
(("a" "b" "c") ("d" "e" "f"))

Lee Mac 发表于 2022-7-5 19:35:48

另一种递归解决方案:
(defun div ( d l / r )
   (cond
       (   (= (car l) d) (div d (cdr l)))
       (   (setq l (vl-member-if '(lambda ( x ) (setq r (cons x r)) (= x d)) l))
         (cons (reverse (cdr r)) (div d (cdr l)))
       )
       (   r (list (reverse r)))
   )
)

ziele_o2k 发表于 2022-7-5 19:43:41

我的版本
(defun div ( d l / m r )
   (foreach x l
       (if (wcmatch x (strcat d "*"))
         (if   m (setq r (cons (reverse m) r) m nil))
         (setq m (cons x m))
       )
   )
   (reverse (if m (cons (reverse m) r) r))
)
19

Tharwat 发表于 2022-7-5 19:48:17

 
 
我看到你在第一次之后还要求了别的东西!无论如何,只要在我的上一个程序中用wcmatch函数替换/=即可,正如在上面的引号中修改的那样。
页: 1 [2]
查看完整版本: 将列表分成两个子列表