Использование acl2, я пытаюсь создать функцию «ins», которая рекурсивно добавляет первый аргумент (список) к фронту каждого элемента во втором аргументе (другой список), гдеРекурсивно добавление списков в начало элемента в списке
(ins (something) ((a b c) (d e f) ...))
возвращает
((something a b c) (something d e f) ...)
поэтому вызов функции как таковой
(ins '((one thing)) '(((this is)) ((something else))))
даст нам
'(((one thing) (this is)) ((one thing) (something else))))
Я пришел с не-рекурсивной функцией, которая работает только в списках ARG2, содержащих один элемент, проверяя, если пустой.
(defun ins(arg1 arg2)
(if (equal arg2 nil) '() (list(append arg1 (first arg2))))
)
Когда я пытаюсь придумать что-то рекурсивного, так что он добавляет первый аргумент ко всем элементам в списке второго аргумента, то лучшее, что я могу сделать, это
(defun ins (arg1 arg2)
(cond
((equal arg2 nil) '())
((not(equal arg2 nil)) (ins (list(append arg1 (first arg2))) (first(rest arg2)))
)))
Но я всегда получаю нуль, несмотря ни на что, и я не могу понять, почему. Таким образом, я даже не знаю, правильно ли рекурсивный звонок. У меня просто сложное время трассировки нетривиальной рекурсии.
Чтобы быть ясным, второй аргумент представляет собой список списков, и вы хотите, чтобы первый аргумент был включен в каждый список в списке списков правильно? – PuercoPop
@PuercoPop Да, это так. – imgoingmad