素晴らしい本「LandofLisp」の例のソースコードを次に示します。
(defun random-node ()
(1+ (random *node-num*)))
(defun edge-pair (a b)
(unless (eql a b)
(list (cons a b) (cons b a))))
(defun make-edge-list ()
(apply #'append (loop repeat *edge-num*
collect (edge-pair (random-node) (random-node)))))
私はLispの本能を持っていないので、メソッドを複数の行に分割し(命令型として)、それを機能的なスタイルに変形させようとすると便利だと思います。
make-edge-list関数を複数の行に分割するのを手伝っていただけませんか。