(Схема) Unbound Переменная при копировании кода - PullRequest
1 голос
/ 31 января 2020

Я копирую следующий код Scheme в буферный файл на emacs из pdf:

(define (plural wd)
  (if (equal? (last wd) ’y)
    (word (bl wd) ’ies)
    (word wd ’s)))

Первоначальное форматирование - длинная строка, и я вручную редактирую ее в формате, показанном выше. Файл загружается, но когда я использую функцию, я получаю сообщение об ошибке:

*** Error:
unbound variable: |’y|
Current eval stack:
__________________
0    (equal? (last wd) |’y|)
1    (if (equal? (last wd) |’y|) (word (bl wd) |’ies|) (word wd |’s|))

Однако, когда я вручную набираю этот код и загружаю файл, функция запускается без проблем.

В каким образом вставка / редактирование кода мешает форматированию кода?

Существует ли правильный способ копирования и вставки кода в файл? Я попытался отформатировать код в текстовом редакторе перед вставкой в ​​буфер, но это тоже не сработало.

Спасибо за ваше время и помощь.

1 Ответ

2 голосов
/ 31 января 2020

На него уже ответили в комментариях Barmar , но это должно позволить вам завершить ваш вопрос и помочь кому-либо еще с такой же проблемой в будущем.

При копировании / вставив код из PDF, вы не скопировали простой символ кавычки ASCII '. Вместо этого вы скопировали «правую одинарную кавычку» (юникод U + 2019 ) . Поскольку это не зарезервированный символ в Scheme, его можно использовать в качестве идентификатора, и поэтому то, что вы ожидали, чтобы быть символом в кавычках 'y, фактически было идентификатором ’y. Ошибка была вызвана отсутствием привязки к переменной ’y.

. Простой способ исправить это, не требуя ручного копирования кода или исправления каждой кавычки вручную, - найти и заменить для ' (если вы не ожидаете символов в ваших строках).

...