Я работаю в emacs с LISP и столкнулся с ошибкой, которую не знаю, как обойти. Выложу вывод, что я из него понял и чего мне не хватает.
Ошибка:
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))
Итак, я хотел бы изменить :junk-allowed nil
на t
в parse-integer
, но я не знаю, как это сделать, потому что я не знаю, где, когда и почему это вызывается. Функция get-event-sequence
(написанная для этой конкретной программы) вызывает get-composition
, что выглядит следующим образом:
(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]])))
Я не знаю, где это целое число синтаксического анализа вызывается из этой функции или как изменить значение этого ключевого слова. Кроме того, строка чисел представляет собой закодированные ключевые подписи и представляет все ключевые подписи в этом конкретном наборе данных, но почему это важно, когда эта функция, кажется, имеет дело только с dataset-id
и composition-id
? Спасибо за вашу помощь!
(-5 -4 -3 -2 -1 0 1 2 3 4 5 6)
. parse-integer предназначен для анализа одного целого числа из строки, а не списка целых чисел. - person Joshua Taylor   schedule 26.06.2016clsql:def-view-class
, например). Поэтому я думаю, что первое, что нужно сделать, это просмотреть данные базы данных и посмотреть, есть ли в отношении (отношениях), соответствующихmtp-composition
, какая-либо проблема с записью (или записями) сdataset-id
равным 26 иcomposition-id
равным 0. - person Renzo   schedule 26.06.2016