質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Q&A

解決済

1回答

537閲覧

Lispの括弧区切りが対応しない

Sme

総合スコア30

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

0グッド

0クリップ

投稿2022/06/10 05:30

Lisp初心者です.取り敢えずhigh and low でも作ってみようかと考えまして,次のコードを書きました.

CommonLisp

1(defvar *nowNum*) 2(defvar *count*) 3(defvar *nextNum*) 4(setq *nowNum* (random 100)) 5(setq *count* 0) 6 (loop 7 (format t "nowNum = ~D~%High(1) or low(0):") 8 (setq *flug* read-line) 9 (setq *nextNum* (random 100)) 10 (if (= *nowNum* *nextNum*) 11 (format t "They are equal~%") 12 (if (equal (> *nextNum* *nowNum*) (= *flug* '0') ) 13 (progn(format t "Failed~% next is ~D~%You won ~D times." *nextNum* *count*) loop-finish) 14 (progn 15 (setq *nowNum* *nextNum*) 16 (setq *count* (+ *count* 1)) 17 ) 18 ) 19 ) 20 )

このとき,次のエラーが出ました.

terminal

1Unhandled SB-C::INPUT-ERROR-IN-LOAD in thread #<SB-THREAD:THREAD "main thread" RUNNING 2 {1001878103}>: 3 READ error during LOAD: 4 5 unmatched close parenthesis 6 7 Line: 12, Column: 52, File-Position: 332 8 9 Stream: #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}> 10 11Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001878103}> 120: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}> #<unused argument> :QUIT T) 131: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}>) 142: (INVOKE-DEBUGGER #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}>) 153: (ERROR #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}>) 164: (SB-C:COMPILER-ERROR SB-C::INPUT-ERROR-IN-LOAD :CONDITION #<SB-INT:SIMPLE-READER-ERROR "unmatched close parenthesis" {10009ED1A3}> :STREAM #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}>) 175: (SB-C::%DO-FORMS-FROM-INFO #<FUNCTION (LAMBDA (SB-KERNEL:FORM &KEY :CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) {10009EAF9B}> #<SB-C::SOURCE-INFO {10009EAF63}> SB-C::INPUT-ERROR-IN-LOAD) 186: (SB-INT:LOAD-AS-SOURCE #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading") 197: ((FLET SB-FASL::THUNK :IN LOAD)) 208: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (FLET SB-FASL::THUNK :IN LOAD) {7FFBF7D3774B}> #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}>) 219: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}> NIL) 2210: (LOAD #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT) 2311: ((FLET SB-IMPL::LOAD-SCRIPT :IN SB-IMPL::PROCESS-SCRIPT) #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}>) 2412: ((FLET SB-UNIX::BODY :IN SB-IMPL::PROCESS-SCRIPT)) 2513: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-IMPL::PROCESS-SCRIPT)) 2614: (SB-IMPL::PROCESS-SCRIPT "test.lisp") 2715: (SB-IMPL::TOPLEVEL-INIT) 2816: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP)) 2917: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-IMPL::START-LISP)) 3018: (SB-IMPL::START-LISP) 31 32unhandled condition in --disable-debugger mode, quitting

エラーを見るに12行目のif式のいずれかの括弧が問題なのだと思われますが,しかしながら何度確認しても括弧は思ったとおりに対応しているように見えます.このエラーが発生している原因を教えてください.
実行環境
debian 11.2
SBCL 2.1.1.debian
実行時コマンド $sbcl --script test.lisp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/06/10 07:05

シングルクォートをダブルクォートに変更してみて下さい。 (if (equal (> *nextNum* *nowNum*) (= *flug* '0') ) => (if (equal (> *nextNum* *nowNum*) (= *flug* "0") ) ただ、この変更をしてもその他のエラーが発生します。
Sme

2022/06/10 07:10

あっ...最近Pythonとかやってたので文字列のつもりで'書いてました... loopの方は当該サイトだとhttp://www.nct9.ne.jp/m_hiroi/clisp/abcl05.htmlの方に書かれてる方の単純な無限ループを用いているつもりです.一旦解決しましたが異なるエラーが出てしまったため自己解決をちょっと試みてみますので一旦このままにします.
ozwk

2022/06/10 07:37

format t "nowNum = ~D~%High(1) or low(0):" *nowNum*)では?
Sme

2022/06/10 07:50

そちらは自己解決しました.
guest

回答1

0

自己解決

Lisp

1(defvar *nowNum*) 2(defvar *count*) 3(defvar *nextNum*) 4(defvar *flug*) 5(setq *nowNum* (random 100)) 6(setq *count* 0) 7 (loop 8 (format t "nowNum = ~D~%High(1) or low(0):" *nowNum*) 9 (setq *flug* (read-line)) 10 (setq *nextNum* (random 100)) 11 (if (= *nowNum* *nextNum*) 12 (format t "They are equal~%") 13 (if (equal (> *nextNum* *nowNum*) (equal *flug* "0") ) 14 (progn(format t "Failed~% next is ~D~%You won ~D times.~%" *nextNum* *count*) (return)) 15 (progn 16 (setq *nowNum* *nextNum*) 17 (setq *count* (+ *count* 1)) 18 ) 19 ) 20 ) 21 )

解決しました,重要だった点は概ね次の通りです.
' ' は " " と等価でない.(hoshi-takanori様ありがとうございます.)
演算子 = はint型の比較にしか用いることができない.(文字列の比較には equal 関数が必要)
引数を要求しない関数でも ()は必要.
お目汚し失礼しました.ありがとうございました.

投稿2022/06/10 07:31

Sme

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問