Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非破坏性子序列,lisp中除外_Lisp_Common Lisp_Subsequence - Fatal编程技术网

非破坏性子序列,lisp中除外

非破坏性子序列,lisp中除外,lisp,common-lisp,subsequence,Lisp,Common Lisp,Subsequence,我知道lisp中的subseq返回一个范围内的子序列。除了该范围之外,是否有任何东西会返回子序列,并且应该是非破坏性的?非常感谢您的帮助。您就不能: (defun seq-drop-subseq (SEQ START &optional END) (if END (nconc (seq-take START) (seq-drop END)) (seq-take START))) 编辑:我得去看看删除就可以了。你就不能: (defun seq-drop-subse

我知道lisp中的subseq返回一个范围内的子序列。除了该范围之外,是否有任何东西会返回子序列,并且应该是非破坏性的?非常感谢您的帮助。

您就不能:

(defun seq-drop-subseq (SEQ START &optional END)
  (if END
      (nconc (seq-take START) (seq-drop END))
    (seq-take START)))
编辑:我得去看看<代码>删除就可以了。

你就不能:

(defun seq-drop-subseq (SEQ START &optional END)
  (if END
      (nconc (seq-take START) (seq-drop END))
    (seq-take START)))

编辑:我得去看看<代码>删除执行此操作。

您可以使用
串联
子序列
对任何序列执行此操作:

(defun sequence-except (sequence start end)
  (concatenate (sequence-type sequence)
               (subseq sequence 0 start)
               (subseq sequence end)))
以下内容足以确定位向量、字符串等的输入序列类型:

(defun sequence-type (sequence)
  (etypecase sequence
    (list 'list)
    (array `(array ,(array-element-type sequence) (*)))))
测试:

(loop for test in (list
                   #*10101001
                   "abcd"
                   '(0 3 2)
                   nil
                   #(1 2 3 4)
                   (make-array 4
                               :adjustable t
                               :fill-pointer T
                               :initial-contents
                               '(a b c d)))
      collect (concatenate (sequence-type test) test))

您可以使用
串联
子序列
对任何序列执行此操作:

(defun sequence-except (sequence start end)
  (concatenate (sequence-type sequence)
               (subseq sequence 0 start)
               (subseq sequence end)))
以下内容足以确定位向量、字符串等的输入序列类型:

(defun sequence-type (sequence)
  (etypecase sequence
    (list 'list)
    (array `(array ,(array-element-type sequence) (*)))))
测试:

(loop for test in (list
                   #*10101001
                   "abcd"
                   '(0 3 2)
                   nil
                   #(1 2 3 4)
                   (make-array 4
                               :adjustable t
                               :fill-pointer T
                               :initial-contents
                               '(a b c d)))
      collect (concatenate (sequence-type test) test))

没有内置的东西。获取范围前的子序列和范围后的子序列,然后将它们与
ncoc
连接起来。没有任何内置内容。获取范围前的子序列和范围后的子序列,然后使用
ncoc
将它们连接起来。