LISPで8Queenを作ろうと思うのですが、どう作ればいいのかわかりません。
ソースじゃなくても、作る上でのヒントでも何でもいいので、わかることがあれば
教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

再帰処理のお題としては古典的ではありますね。



検索すると幾つも見つかりますよ。参考URL以外にも

http://www.ipc.kobe-u.ac.jp/News/mage/mage27/104/
http://www.not-compatible.org/LISP/CL/queens.html

なんてところが。

穴があくほど見つめて勉強して下さい。

参考URL:http://www.geocities.co.jp/SiliconValley-Oakland …
    • good
    • 0
この回答へのお礼

すいません。ありがとうございました。
これから頑張ってみます。

お礼日時:2001/12/07 00:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QmacにおけるCommon LISP以外のLISP処理系について

初めまして.

大学の授業のレポートでプログラミング課題が課されました.
その中で参考になりそうな書籍を図書館で見つけ,そこに書かれていたLISPのコードを移しCLISPで実行しようとしたのですが,Common LISPでは使用されていない関数(put, unpackなど)が含まれており,実行出来ずに困っています.
なので,そもそもCommon LISPの処理系ではなくLISP自体の処理系を用いて実行できないかと思っているのですが,調べてみてもCommon LISPの処理系ばかりが出てきてしまい困っています.

そこで,Common LISPではないLISPの処理系について教えていただければと思い質問しました.

よろしくお願い致します.

Aベストアンサー

うーん、多分まずその本が「古くて」ダメなんじゃないか、って思うんですが・・・(笑)。
unpackってのは聞いたことないんですが、恐らくputってのは大昔のLisp処理系での属性リストに値を入れる時に使ってた関数だと思います。
Common Lispにも属性リストはありますが、基本的には汎用マクロのsetfを使って値をセットするようになっています。
いずれにせよ、cautionです。基本的には、80年代から以前に書かれたLispの本は使わない方が無難でしょう。90年代以降に書かれた本を使うようにした方が良いです(その方が紛れが少ないです)。

現在、Common Lisp以外のLisp方言だと次の3つが有名でしょう。

・Emacs Lisp・・・テキストエディタEmacs( http://th.nao.ac.jp/MEMBER/zenitani/emacs-j.html がMacでは有名だったけど今じゃちと古い?)で使われているLisp方言
・Scheme・・・Common Lispを双璧を成すLisp方言。日本ではGauche( http://practical-scheme.net/gauche/index-j.html )が有名だけどMac版はどーなんだろうなぁ。他にSchemeのこれまた方言であるRacket( http://racket-lang.org/ )があります。うーん他にもScheme実装あることはあるけど、Macだとどうなんでしょう。ソースからビルドする、って手もあるこたぁあるんですが・・・Racketが無難ですかねぇ。
・Clojure・・・新しく出てきたLisp方言でアツい。これはJVM(Java Virtual Machine)上で動きます。つまり、MacでJavaが動かせるなら基本的にはこいつも動く、って事です。公式サイトは http://clojure.org/ 。

とまぁ、この3つが基本的なLisp方言ですが、取り敢えず悪いことは言わないんで(笑)、あまり古い本でLispやるのは避けた方が良いですね。

うーん、多分まずその本が「古くて」ダメなんじゃないか、って思うんですが・・・(笑)。
unpackってのは聞いたことないんですが、恐らくputってのは大昔のLisp処理系での属性リストに値を入れる時に使ってた関数だと思います。
Common Lispにも属性リストはありますが、基本的には汎用マクロのsetfを使って値をセットするようになっています。
いずれにせよ、cautionです。基本的には、80年代から以前に書かれたLispの本は使わない方が無難でしょう。90年代以降に書かれた本を使うようにした方が良いです(その方が...続きを読む

QLispについてわからないことが(Scheme)

あるLispの勉強ソフトで、

「関数lを『引数としてxを受け取ると、xの要素の数を返す関数』として定義しなさい。」

という問題があるのですが、私は以下のようにしました。

(define l (lambda (x) (if (= x null?) 0 (+ 1 (l (cdr x))))))

しかしこれだとオーバーフローと表示されて強制終了されてしまいました。
そこで答えをネットで検索したところ以下のものが見つかりました。

(define l (lambda (x) (cond ((null? x) 0) (else (+ 1 (l (cdr x)))))))

これが正解なようですが、この2つのリストの違いがわかりません。
初歩的なことですがifの使い方を間違っているんでしょうか?

Aベストアンサー

間違えているのは「if の使い方」ではなく「条件の書き方」です.
あなたが書いたのは「x と null? の値が等しいときに 0 を, そうでないときに (+ 1 ...) を返す」という関数です. さて, じっと考えてください. 「x と null? の値が等しい」ことはありえますか?
「答え」にあるのは「x が nil なら 0, そうでなければ (+ 1 ...) を返す」という関数です. これを if で書くと
(define l (lambda (x) (if (null? x) 0 (+ 1 (l (cdr x))))))
です.

QLispでマージソート

Lisp初心者のものです。

Lispでマージソートはどのように書けばいいのでしょうか?
結果のリストは、二つの引数リストの要素すべてを含んでいなければならず、たとえば

(marge ' (3 3 6 7) ' (2 5 8)) の答えは
(2 3 3 5 6 7 8) です。

Aベストアンサー

厳密にいうと全然足りないけどまあいいか.
まず, 2つのリスト L1, L2 がどちらも「要素を持つ」ときを考えます. L1, L2 の先頭要素はもってこれますか?
で, L1 の先頭要素の方が小さければ, これは「最終的にできるリスト」の先頭要素になることが確定します. 残りの部分は「L1 から先頭要素を除いたリスト」と L2 をマージしたリストなので, これを (再帰的に) 求めてから L1 の先頭要素を (先頭に) 追加します.
L2 の先頭要素の方が小さいときもほぼ同じなので省略.
あと, いずれかのリストが空のときにはもう一方のリストを返せばいいですね. だから, 全体としておよそ
(defun merge (x y)
(if (null x) y
(if (null y) x
(let (....) ....))))
という形になるはずです. let は使わなくてもいいんだけど多分使った方がきれい.

Qlispについて質問です

assoc関数と同じ動作をする関数(ただし、文字列も扱えるようにする)を作成したいと考えています
具体的には、
(setq S '(("1" "a")("2" "b")))
とあったときに、自作した関数(assoc_mojiとします)
(assoc_moji "1" S)
と実行したら
("1" "a")
となるような関数です
また、無い場合はnilを返します

条件分岐で関数を組み込み、成功した場合は結果を返し
そのほかの場合はnilを返すというところまではわかりますが、
その条件分岐で定義する式が全くわかりません。
memberや、equalを使って、リストに含まれていれば、または指定した文字列が一緒ならば、返すなどしましたがまったくうまくいきませんでした。
どなたか、こういう関数を使ってこういう処理をさせればよいという風なヒントだけでもいいので、ご教授お願いします

Aベストアンサー

多分、再帰の考え方を使って作って欲しいんじゃないかと思います。
試してみたところ、cond, null, car, cdr, equal, assoc_moji でできますね。

基本的な再帰の考え方は、「リストを下って見ていく」というものです。
(assoc_moji key lst)の形で使用するとして、

まずは、lstの先頭要素(上の例で言うところの("1" "a")の部分;car部)が条件に当てはまるかどうかを見ます。当てはまればその要素を返せばよい。
当てはまらなかった場合は、lstの先頭以外の部分(上の例で言うところの(("2" "b"))の部分;cdr部)に対して同じ捜索をかけて、その結果として返ってくるものを返せば良い。
という考え方です。

実際のプログラムとしては、
・lst が空なら nil を返す
・lst のひとつ目の要素を見て、それが条件に当てはまるなら、その要素を返す
・上記以外の場合は、lstのcdr部に関して再帰

色々省略しましたが、再帰の考え方が伝わりましたら幸いです。

QRubyでプログラムを作りたいけどどうすればよいのかわからない!

私はRubyを使ってwebページで使うプログラムを作りたいと思っています。
ですが、どう勉強すればよいのか分かりません。
教えてください。

ちなみに、私はホームページ作成の知識は少しあります。
CGIの設置も簡単なものなら出来ます。

Aベストアンサー

>オススメの本がありましたら教えてください。

たのしいRuby
http://www.amazon.co.jp/gp/product/4797336617/


人気Q&Aランキング

おすすめ情報