"недопустимый завершающий символ после двоеточия: # \" в portacle, хотя в коде нет двоеточий - PullRequest
1 голос
/ 05 мая 2019

Я недавно настроил Portacle 1.3 для изучения общего lisp на Win 7. Однако всякий раз, когда я запускаю свой код, я получаю сообщение об ошибке, даже если кода нет. Однако запуск отдельных строк работает нормально. Ошибка отображается только при запуске всего файла.

Я пытался поместить некоторый код в функцию EVAL, но я считаю, что он принимает только один аргумент за раз, поэтому я не смог запустить целую программу в нем.

Я обнаружил похожую ошибку на этой странице stackoverflow, но их код содержит двоеточия, и в этом их ошибка.

Я думаю, что это может быть ошибкой в ​​коде, который запускает мой, видя, как я получаю ошибку, даже если я компилирую без кода, однако я ничего не знаю.

Полная ошибка:

main.lisp:1:1:
  read-error: 
    READ error during COMPILE-FILE:

      illegal terminating character after a colon: #\

        Line: 1, Column: 13, File-Position: 12

        Stream: #<SB-INT:FORM-TRACKING-STREAM for "file [path to file]\\main.lisp" {1005F5F0D3}>

Compilation failed.

1 Ответ

4 голосов
/ 05 мая 2019

Portacle - это автономный Emacs, упакованный со всем необходимым для разработки Common Lisp и использующий SBCL в качестве реализации Common Lisp.

Я полагаю, что когда вы говорите «скомпилировать весь файл», вы вызываете slime-compile-and-load-file, который по умолчанию связан с последовательностью клавиш C-c C-k.Здесь много движущихся компонентов:

  • Emacs - текстовый редактор здесь.Он также заботится о запуске всех необходимых компонентов для разработки Common Lisp.
  • Slime является одним из таких компонентов.Он служит интерфейсом между Emacs и вашей реализацией Common Lisp (в данном случае SBCL, но теоретически поддерживает любой Lisp).По сути, он отправляет код, который вы написали в Emacs, на ваш Lisp для оценки.
  • SBCL - реализация Common Lisp.В данном случае это компилятор.Это то, что оценивает полученный код и выдает ответы на пользовательский интерфейс в Emacs через Slime.Он также «живет» в том смысле, что вы взаимодействуете с ним, изменяя состояние загруженного изображения Lisp, отслеживая определенные функции, глобальные динамические переменные и многое другое.Вот почему у вас может быть REPL, и поэтому вам необходим Slime для взаимодействия с ним.

Итак, чтобы отладить вашу проблему, я бы попытался:

  • Запустить SBCLиз оболочки Windows и запустите простой файл .lisp, чтобы убедиться, что все работает.Например, вы можете поместить (format t "~a" (lisp-implementation-type)) в .lisp файл и запустить его в SBCL из оболочки, вызвав (load "...\\file.lisp").Он должен вернуть "SBCL".
  • Создать совершенно новый файл, используя Emacs (а не странные программы Windows, которые могут испортить файлы) (C-x C-f), и попытаться вызвать компиляцию оттуда (C-c C-k).

И я считаю, что вы сделали правильный выбор IDE.Возможно, Portacle - самый простой инструмент, если вы новичок в Common Lisp и не знаете конфигурации Emacs.Тем не менее, сочетание клавиш немного устрашает.

...