2016-06-25 3 views
2

私はLISPでemacsで作業していますが、回避方法がわかりません。アウトプット、私がそれから理解していること、そして私が欠けているものを載せます。デフォルトを変更する:LISPのトップレベル関数からparse-integerのjunk-allowed値を取得する

エラー:

junk in string "(-5 -4 -3 -2 -1 0 1 2 3 4 5 6)" 
    [Condition of type SB-INT:SIMPLE-PARSE-ERROR] 


Backtrace: 

0: (PARSE-INTEGER "(-5 -4 -3 -2 -1 0 1 2 3 4 5 6)" :START 0 :END NIL :RADIX 10 :JUNK-ALLOWED NIL)  
1: ((:METHOD CLSQL-SYS:READ-SQL-VALUE :AROUND (T T T T)) "(-5 -4 -3 -2 -1 0 1 2 3 4 5 6)" INTEGER #<CLSQL-SQLITE3:SQLITE3-DATABASE C:/Users/sas31/idyom/db/database.sqlite OPEN {1007D61933}> :SQLITE3) [fa..  
2: ((:METHOD CLSQL-SYS::UPDATE-SLOT-FROM-DB-VALUE (CLSQL-SYS:STANDARD-DB-OBJECT T T)) #<unavailable argument> #<unavailable argument> #<unavailable argument>) [fast-method]  
3: (CLSQL-SYS::BUILD-OBJECTS (#<CLSQL-SYS:SELECT-LIST {100592E993}>) #<unavailable argument> #<CLSQL-SQLITE3:SQLITE3-DATABASE C:/Users/sas31/idyom/db/database.sqlite OPEN {1007D61933}> #<unavailable argu..  
4: (CLSQL-SYS::FIND-ALL (IDYOM-DB:MTP-EVENT) :RESULT-TYPES :AUTO :REFRESH NIL :INSTANCES NIL :WHERE #<CLSQL-SYS:SQL-RELATIONAL-EXP (MTP_EVENT.COMPOSITION_ID = 0 AND MTP_EVENT.DATASET_ID = 26)> :FLATP T :..  
5: (CLSQL-SYS::FIND-ALL (IDYOM-DB:MTP-EVENT) :RESULT-TYPES :AUTO :REFRESH NIL :INSTANCES NIL :WHERE #<CLSQL-SYS:SQL-RELATIONAL-EXP (MTP_EVENT.COMPOSITION_ID = 0 AND MTP_EVENT.DATASET_ID = 26)> :FLATP T :..  
6: (CLSQL-SYS:SELECT IDYOM-DB:MTP-EVENT :WHERE #<CLSQL-SYS:SQL-RELATIONAL-EXP (MTP_EVENT.COMPOSITION_ID = 0 AND MTP_EVENT.DATASET_ID = 26)> :FLATP T :RESULT-TYPES NIL :DATABASE #<CLSQL-SQLITE3:SQLITE3-DA..  
7: (CLSQL-SYS::FAULT-JOIN-SLOT #<CLSQL-SYS::STANDARD-DB-CLASS IDYOM-DB:MTP-COMPOSITION> #<IDYOM-DB:MTP-COMPOSITION {10047AAA73}> #<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION IDYOM-DB::EVENTS>)  
8: ((:METHOD SB-MOP:SLOT-VALUE-USING-CLASS (CLSQL-SYS::STANDARD-DB-CLASS T T)) #<unavailable argument> #<unavailable argument> #<unavailable argument>) [fast-method]  
9: (IDYOM-DB::GET-EVENT-SEQUENCE 26 0)  
10: (IDYOM-DB:COUNT-EVENTS 26 0)  
11: (MIDI2DB::FIX-BIOI-DUR-DELTAST 26)  
12: (SB-INT:SIMPLE-EVAL-IN-LEXENV (MIDI2DB::FIX-BIOI-DUR-DELTAST 26) #<NULL-LEXENV>)  
13: (EVAL (MIDI2DB::FIX-BIOI-DUR-DELTAST 26)) 

だから、私はparse-integert:junk-allowed nilを変更したいのですが、どこときや、なぜそれが呼ばれています私はありませんので、私はそれを行う方法がわかりません。

(defun get-composition (dataset-id composition-id) 

"Returns the composition whose dataset-id is <dataset-id> and whose 
    composition-id is <composition-id>." 

(car (clsql:select 
     'mtp-composition 
     :flatp t 
     :where [and [= [slot-value 'mtp-composition 'dataset-id] dataset-id] 
        [= [slot-value 'mtp-composition 'composition-id] composition-id]]))) 

私は、この解析-整数は、この関数から呼ばれている場所またはそのキーワードの値を変更する方法がわからない。(この特定のプログラムのために書かれた)機能get-event-sequenceは、次のように読み込む、get-compositionを呼び出します。また、数値の文字列はコード化されたキーシグネチャであり、この特定のデータセットのすべてのキーシグネチャを表しますが、この関数がdataset-idcomposition-idを扱うように見えるのはなぜですか?ご協力いただきありがとうございます!

+2

でもあなたができればjunk-allowedの真値を指定すると、 '(-5 -4 -3 -2 -1 0 1 2 3 4 5 6)'のような入力では意味をなさないでしょう。** parse-integer **は整数のリストではなく、文字列から*単一の整数を解析する –

+3

データベース内のデータ(データが挿入されたとき*フィールドの型をチェックしない* SQLite3である)やそのモデル定義(例えば 'clsql:def-view-class'の内部) 。ですから、最初に行うべきことは、データベースのデータを見て、 'mtp-composition'に対応する関係の中に' dataset-id()を持つレコード'26に等しく、' composition-id'は0に等しい。 – Renzo

答えて

3

バックトレースを見ると、parse-integerが汎用関数clsql-sys:read-sql-valueのメソッドによって呼び出されていることがわかります。

コードを確認せずに、:junk-allowed nilがデフォルト値を示しているバックトレースであるか、メソッドからその方法でアクティブに呼び出されているかどうかはわかりません。

しかし、戻り値がnil(「(」は数字でも白い空白でもないので)ため、この値を真の値にすることは本当に役に立ちません。おそらく暗黙のスキーマ違反へのデータベース、(あなたがして番号のリストを格納してORMが回復不能な何かをした、「私は数字を格納したい」と述べました)。

* (parse-integer " 2 " :junk-allowed t) 

2 
2 
* (parse-integer "(2 " :junk-allowed t) 

NIL 
0 
関連する問題