我一直在各处搜索Lisp中的以下功能,但是一无所获:

  • 在列表中找到某物的索引。例子:
    (index-of item InThisList)
    
  • 替换列表中特定位置的内容。例子:
    (replace item InThisList AtThisIndex) ;i think this can be done with 'setf'?
    
  • 返回特定索引处的项目。例子:
    (return InThisList ItemAtThisIndex)
    

  • 到目前为止,我一直在用自己的功能进行伪装。我想知道我是否只是为自己创造更多的工作。

    这就是我一直在伪造的数字1:
    (defun my-index (findMe mylist)
      (let ((counter 0) (found 1))
        (dolist (item mylist)
          (cond
            ((eq item findMe) ;this works because 'eq' checks place in memory,
                      ;and as long as 'findMe' was from the original list, this will work.
             (setq found nil)
            (found (incf counter))))
      counter))
    

    最佳答案

    您可以使用setfnth来替换和检索索引值。

    (let ((myList '(1 2 3 4 5 6)))
         (setf (nth 4 myList) 101); <----
         myList)
    
    (1 2 3 4 101 6)
    

    要按索引查找,可以使用the position function
    (let ((myList '(1 2 3 4 5 6)))
         (setf (nth 4 myList) 101)
         (list myList (position 101 myList)))
    
    ((1 2 3 4 101 6) 4)
    

    我发现了所有这些in this index of functions

    关于functional-programming - 在Lisp中列出操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45227/

    10-10 01:45