• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:common lispのプログラミングについて)

common lispのプログラミングについて

cametan_42の回答

  • ベストアンサー
回答No.3

ああそうか、そっちのロジックに乗って、こっちのコードの方が分かりやすいかな。 ローカル関数使用を止めて、そちらのロジックに則ってSchemeで書きなおしたのがこれです。 (define (quiz)  (display "=====hi!=====\n")  ; set!(Common Lispだとsetq)は使わずletを使う  (let ((cc '((ki . yellow) (ao . blue) (aka . red)               (cha . brown) (murasaki . purple))))   (quiz-tr cc))) ; quiz-trにccを渡す (define (quiz-tr lst)  ; 比較条件が少ないならifを使った方がスマート  ; 空リスト精査ならnull?(Common Lispだとnull)を使う  (if (null? lst) (display "bye.")    (let ((q&alist (car lst)))     ; ここで問題を出力     (display (car q&alist))     (let ((input (read)))      ; ここで末尾再帰      ; 出力した後に引数リストのcdrをquiz-trに手渡す      (cond ((eq? (cdr q&alist) input) (display "correct!\n") (quiz-tr (cdr lst)))         ; ここで末尾再帰         ; 間違った場合、同じ問題を出すので、出力後、引数リストはそのままで再帰呼び出し         (else (display "wrong.\n") (quiz-tr lst)))))))

purplehouse
質問者

お礼

ありがとうございます! 参考にしてみます!

関連するQ&A

  • emacsでcmmon lispのプログラムを作成します。

    emacsでcmmon lispのプログラムを作成します。 my-equal(A, B)= if A is an atom then if B is an atom then (eq A B) else if B is an atom then nil else if (car A)=(car B) then (cdr A)=(cdr B) else nil というのです。自分が考えたのは、 defun my-equal(x, y)= (cond ((atom x) (atom y)) (eq x, y) (atom) (t, nil) ((car x)=(car y) (cdr x)=(cdr y)) (nil)) というのでよろしいのでしょうか? また、4行目(この全文の)の意味がいまいち分かりません。

  • 質問の選択肢をランダム表示したいです。

    4つの選択肢の中から一つを選ばせて、その結果を集計して、結果によって違うページに飛ぶスクリプトを作っています。 その中で4つの選択肢をランダムに表示させる方法がわかりません。 Q1赤青緑黄,Q2赤青緑黄,Q3赤青緑黄… Q5赤青緑黄と現在なっていますが、 Q1緑黄赤青,Q2赤緑黄青,Q3青緑赤黄… Q5赤青緑黄という感じにしてもちゃんと集計してくれるようにしたいです。 以下のプログラムまでできています。アドバイスお願いします。 <title>好きな色</title> <script type="text/javascript"><!-- function count(f){ var aka = 0; var ao = 0; var yellow = 0; var midori = 0; for(var i=1; i<=10; i++){ if(f["q" + i][0].checked && f["q" + i][0].value=="1"){ aka++; } else if(f["q" + i][0].checked && f["q" + i][0].value=="2"){ aka--; } else if(f["q" + i][1].checked && f["q" + i][1].value=="3"){ ao++; } else if(f["q" + i][1].checked && f["q" + i][1].value=="4"){ ao--; } else if(f["q" + i][2].checked && f["q" + i][2].value=="5"){ midori++; } else if(f["q" + i][2].checked && f["q" + i][2].value=="6"){ midori--; } else if(f["q" + i][3].checked && f["q" + i][3].value=="7"){ yellow++; } else if(f["q" + i][3].checked && f["q" + i][3].value=="8"){ yellow--; } } if( aka > ao && aka > midori && aka > yellow){ location.href="01.html"; } else if( yellow > ao && yellow > midori && yellow > aka){ location.href="02.html"; } else if( ao > aka && ao > midori && ao > yellow){ location.href="03.html"; } else if( midori > ao && midori > aka && midori > yellow){ location.href="04.html"; } else { location.href="05.html"; } } //--> </script> </head> <body> <center> <form name="test"> <p> <table border="1"> <tr> <td> Q1 </td> <td>Yes</td> <td>No</td></tr> <br> <td><label>赤</label></td> <td><input type="radio" name="q1" value="1" /></td> <td><input type="radio" name="q2" value="2" /></td></tr> <td><label>青</label></td> <td><input type="radio" name="q1" value="3" /></td> <td><input type="radio" name="q2" value="4" /></td></tr> <td><label>緑</label></td> <td><input type="radio" name="q1" value="5"/></td> <td><input type="radio" name="q2" value="6"/></td></tr> <td><label>黄</label></td> <td><input type="radio" name="q1" value="7"/></td> <td><input type="radio" name="q2" value="8"/></td></tr> </table> <table border="1"> <tr> <td> Q2 </td> <td>Yes</td> <td>No</td></tr> <br> <td><label>赤</label></td> <td><input type="radio" name="q3" value="1"/></td> <td><input type="radio" name="q4" value="2"/></td></tr> <td><label>青</label></td> <td><input type="radio" name="q3" value="3" /></td> <td><input type="radio" name="q4" value="4" /></td></tr> <td><label>緑</label></td> <td><input type="radio" name="q3" value="5"/></td> <td><input type="radio" name="q4" value="6"/></td></tr> <td><label>黄</label></td> <td><input type="radio" name="q3" value="7"/></td> <td><input type="radio" name="q4" value="8"/></td></tr> </table> <input type="button" value="採点" onclick="count(this.form)"> </form> </center> </body> </html>

  • Common Lispのお仕事

    人工知能のプログラミング言語 とのことですが、今までCommon Lispの求人など 見たことないですし、実際にどういった所で どれほど使われているものなのでしょうか。

  • GNU COMMON LISP

    GCLでWindows実行可能なexeファイルを作ることができますか。

  • common lispのコード

    リスト中の要素aの数をカウントするプログラムを反復で書いたのですが、実行しようとすると停止してしまいます。何が悪いのでしょうか?教えてもらえませんか? (defun dot (lst) (let ((c 0)) (do ((ls lst (cdr lst)) ((null ls) c) (if (eq 'a (car ls)) (+ c 1) (+ c 0)))))

  • LISPのプログラミングについて

    リストと数nを引数として、リストの(n-1)番目の要素を返す関数を 再帰を使って定義するにはどうすればいいでしょうか?

  • [common lisp]データ読み込みについて

    txtファイルからデータを読み込み、dataに付置したいです。 (setq data (with-open-file (in "/test.dat" :direction :input))) って可能でしょうか? また、テキストデータの中のデータの書式はどのようにすればいいですか?(テキストエディット使用) データが文章なのですが、 ("hi how are you" "hi how are you")こんな感じで大丈夫ですか?

  • Common LISPでファイルの読込・書込を行う方法は、どのようにするのでしょうか?

    Common LISPでファイルの読込・書込を行う方法は、どのようにするのでしょうか? 例えば、CSVファイルを読み込んで、それをLISPのS式に変換し、違うファイル名で書き出すことがしたいです。 CommonLISPおよびxyzzyで動作させたいです。 ●入力ファイル test.csv 1,中村,100 2,伊藤,80 3,駒田,70 ●出力ファイル test.lsp (setq dat '( (1 中村 100) (2 伊藤 80) (3 駒田 70) ))

  • LISPはもう、使えませんか?

    こんにちは。 AUTO CAD 2004を使用していますが、 昔のバージョンだと、 自分で作ったLISPをロードして、使えたのですが、 2004では、LISP自体ロードが出来ません。 2004では、LISPは使用できないのでしょうか? 同じく、AUTO CAD 2004LTも同様でしょうか? どなたか、教えて下さい。

  • Lispについて

    最近プログラミングについて学ぼうと思っていろいろ調べてるのですが、その中でLispというものを見つけました。 関数型プログラミング言語であることや人工知能の開発に使われているということは分かったのですが、他にどのようなことができるのでしょうか? C言語に代わってソフトウェアの開発などもできるのでしょうか? (C++を学校で学び始めたばかりでまだ何もできないのですが…)