ここではLISPの初心者です。LISP の次の試験の準備をしていて、解決できない問題に出くわしたので、経験豊富な人が助けてくれることを期待していました。
とにかく、ここに私の問題があります。要素としてリストを含む可能性のあるリストが与えられます。あなたの仕事は、特定の位置にあるアトミック要素を削除することです。
リストと位置は入力パラメータとして与えられます。
例 : Position=5 、 List=(1 (2 3) ((4)) (5 (6))) 、 (1 (2 3) ((4)) ((6))) を返す必要があります。
これが私がこれまでに得たものです...(PS以下のコードは imMaw の支援のおかげで機能します。編集をチェックして、以前の間違いを確認できます)。
(defun number_of_atoms(List)
(atoms List 0)
)
(defun atoms(List Number)
(cond
((null List) Number)
((atom (car List)) (atoms (cdr List) (+ 1 Number)))
((+ (atoms (car List) Number) (atoms (cdr List) 0)))
)
)
(defun deleteElement(Pos List)
(deleteElementAcc Pos 1 List)
)
(defun deleteElementAcc(Pos CurrPos List)
(cond
((null List) nil)
((and (atom (car List)) (not(eql CurrPos Pos))) (cons (car List) (deleteElementAcc Pos (+ CurrPos 1) (cdr List))))
((and (atom (car List)) (eql CurrPos Pos)) (deleteElementAcc Pos (+ CurrPos 1) (cdr List)))
((cons (deleteElementAcc Pos CurrPos (car List))
(deleteElementAcc Pos (+ CurrPos (number_of_atoms(car List))) (cdr List))))
)
)