Я искал везде следующие функции в Лиспе, и не получили нигде:Могу ли я сделать это в 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))
Кроме того, мы не «заменяем» элемент в списке. Мы копируем первые (r-1) элементы и помещаем новое значение в r, где cdr связан с элементом (r + 1) - поскольку мы имеем дело с постоянством. – nlucaroni 2008-09-10 15:55:34