関数(* x 2)をリスト内の他のすべての要素に適用し、ループマクロを使用してリスト全体を返したいと思います。私がこれまでに思いついた解決策はこれです:
(defun double-every-other (xs)
(loop for x in xs by #'cddr collect (* x 2)))
ただし、これは1つおきの要素を倍増し、倍増した要素のみを返すため、次のように実行した場合:
(double-every-other '(1 2 3 4))
結果は次のようになります。
'(4 8)
しかし、私は結果を次のようにしたいと思います。
'(1 4 3 8)
(ループ)を使用してこれを行う方法はありますか?
たとえば、リストのスキャン中に増加する整数をテストできます。
(defun double-every-other (xs)
(loop for x in xs
for i from 1
if (oddp i)
collect x
else collect (* x 2)))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加