2015-12-01 3 views
0

Использование 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))) 

    ))) 

Но я всегда получаю нуль, несмотря ни на что, и я не могу понять, почему. Таким образом, я даже не знаю, правильно ли рекурсивный звонок. У меня просто сложное время трассировки нетривиальной рекурсии.

+0

Чтобы быть ясным, второй аргумент представляет собой список списков, и вы хотите, чтобы первый аргумент был включен в каждый список в списке списков правильно? – PuercoPop

+0

@PuercoPop Да, это так. – imgoingmad

ответ

2

Что-то вроде этого?

(defun ins (arg1 arg2) 
    (if arg2 
     (cons (append arg1 (car arg2)) 
      (ins arg1 (cdr arg2))) 
     '())) 
+0

«когда» не входит в общий пакет. Я просмотрю его независимо, спасибо. Я уверен, что есть другой способ написать это. – imgoingmad

+0

Вы можете просто использовать 'if'instead в этом случае. – uselpa

+0

Я не верю, если и когда можно использовать взаимозаменяемо. Хотя я не знаю, как «когда» здесь работает, если требуется 3 аргумента, где он используется как таковой (если тест затем еще). Здесь используются только 2 аргумента. – imgoingmad

Смежные вопросы