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

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

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

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

解決済

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

Sme
Sme

総合スコア15

LISP

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

1回答

0評価

0クリップ

189閲覧

投稿2022/06/10 05:30

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

CommonLisp

(defvar *nowNum*) (defvar *count*) (defvar *nextNum*) (setq *nowNum* (random 100)) (setq *count* 0) (loop (format t "nowNum = ~D~%High(1) or low(0):") (setq *flug* read-line) (setq *nextNum* (random 100)) (if (= *nowNum* *nextNum*) (format t "They are equal~%") (if (equal (> *nextNum* *nowNum*) (= *flug* '0') ) (progn(format t "Failed~% next is ~D~%You won ~D times." *nextNum* *count*) loop-finish) (progn (setq *nowNum* *nextNum*) (setq *count* (+ *count* 1)) ) ) ) )

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

terminal

Unhandled SB-C::INPUT-ERROR-IN-LOAD in thread #<SB-THREAD:THREAD "main thread" RUNNING {1001878103}>: READ error during LOAD: unmatched close parenthesis Line: 12, Column: 52, File-Position: 332 Stream: #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}> Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001878103}> 0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}> #<unused argument> :QUIT T) 1: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}>) 2: (INVOKE-DEBUGGER #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}>) 3: (ERROR #<SB-C::INPUT-ERROR-IN-LOAD {10009ED1E3}>) 4: (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}>) 5: (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) 6: (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") 7: ((FLET SB-FASL::THUNK :IN LOAD)) 8: (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}>) 9: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}> NIL) 10: (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) 11: ((FLET SB-IMPL::LOAD-SCRIPT :IN SB-IMPL::PROCESS-SCRIPT) #<SB-SYS:FD-STREAM for "file /home/smearble/programming/CommonLisp/test/test.lisp" {10009E8E03}>) 12: ((FLET SB-UNIX::BODY :IN SB-IMPL::PROCESS-SCRIPT)) 13: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-IMPL::PROCESS-SCRIPT)) 14: (SB-IMPL::PROCESS-SCRIPT "test.lisp") 15: (SB-IMPL::TOPLEVEL-INIT) 16: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP)) 17: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-IMPL::START-LISP)) 18: (SB-IMPL::START-LISP) unhandled condition in --disable-debugger mode, quitting

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

LISP

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