« UbuntuのUSBブートは実用的だ | トップページ | Ubuntuのインストール方法、いろいろ »

スタンダートテキスト"ANSI Common Lisp"

ピアソン・エデュケーションの"ANSI Common Lisp"は良いテキストなのだが、練習問題に正解がついていないのが、玉に瑕だ。
安易に正解に頼らない、「勉強かくあるべし」という姿勢はとても良いと思うが、難しい問題もあるのでやはり正解は欲しい。

どんな練習問題があるかというと、例えば4章の第一問は、

正方の配列(大きさが(n n)の配列)を引数としてそれを90度、時計回りに回転させる関数を定義せよ。

というもので、例として
>(quarter-turn #2A((a b) (c d)))
#2A((C A) (D B))

とある。
最初、何を言っているのか正直わからなかったが、

a b
c d

c a
d b

に、

a b c
d e f
g h i

g d a
h e b
i  f  c

に変換する関数のことらしい。
そこで、こんな解答を作ってみた。
一応動いているようだ。

(defun quarter-turn (a)
  (let ((nn (array-dimensions a)))
    (let ((n (car nn))
          (b (make-array nn)))
        (do ((i 0 (+ i 1))) ((= i n))
          (do ((j 0 (+ j 1))) ((= j n))
            (setf (aref b j (- n 1 i)) (aref a i j))))
      b)))

ANSI Common Lisp (スタンダードテキスト) Book ANSI Common Lisp (スタンダードテキスト)

著者:ポール グレアム
販売元:ピアソンエデュケーション
Amazon.co.jpで詳細を確認する

ANSI Common Lisp ANSI Common Lisp

販売元:楽天ブックス
楽天市場で詳細を確認する

|

« UbuntuのUSBブートは実用的だ | トップページ | Ubuntuのインストール方法、いろいろ »

LISP」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1286769/34837378

この記事へのトラックバック一覧です: スタンダートテキスト"ANSI Common Lisp":

« UbuntuのUSBブートは実用的だ | トップページ | Ubuntuのインストール方法、いろいろ »