2

Doug Hoyte による本「Let over Lambda」では、ソート ネットワークを介した固定サイズの入力の高速ソート関数について説明しています。

(defmacro! sortf (comperator &rest places)
  (if places
    `(tagbody
      ,@(mapcar
        #`(let ((,g!a #1=,(nth (car a1) places))
                (,g!b #2=,(nth (cadr a1) places)))
            (if (,comperator ,g!b ,g!a)
              (setf #1# ,g!b
                    #2# ,g!a)))
        (build-batcher-sn (length places))))))

'(car a1)' と '(cadr a1)' という式の記号 'a1' はどこから来たのですか?

ところで。「デフマクロ!」'gensym' を介して新しいシンボルを作成するために 'g!{symbol}' 構文を導入するマクロを定義するマクロです。そして、'build-batcher-sn' は、Batcher のアルゴリズムを使用してソーティング ネットワークを構築します。

4

1 に答える 1