На схеме R5RS определение-синтаксис игнорируется? - PullRequest
1 голос
/ 26 февраля 2012

Только начал изучать Схему.Я использую Dr. Racket в качестве моего компилятора / интерпретатора.

Мне нужны некоторые строковые функции (точная замена строк), поэтому я скопировал из SRFI 13 .

Когда я проверяю его, он показывает ..

reference to undefined identifier: let-string-start+end

Это определяется с помощью

define-syntax let-string-start+end

Кажется, что его игнорируют?Что на самом деле происходит?

1 Ответ

8 голосов
/ 26 февраля 2012

Вам не нужно вручную копировать и вставлять элементы из SRFI 13: он встроен в Racket. Фактически, большинство основных библиотек SRFI связаны с Racket: http://docs.racket -lang.org / srfi / index.html

Если вы используете язык r5rs в Racket, вы можете использовать SRFI 13 со следующей строкой:

(#%require srfi/13)

Странно выглядящий #%require - специфичный для Racket hook , который позволяет программе r5rs загружать библиотечные модули из Racket.

Итак, программа r5rs в Racket будет выглядеть примерно так:

(#%require srfi/13)
(display (string-replace "foo world" "hello" 0 3))
(newline)

Если вместо использования базового языка r5rs вы используете вместо него полноценный #lang racket, импорт SRFI 13 будет выглядеть аналогично. Вот небольшая программа в #lang racket, которая делает то же самое, что и предыдущая программа:

#lang racket
(require srfi/13)
(string-replace "foo world" "hello" 0 3)

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

define-syntax let-string-start+end

и в этой строке фактически отсутствуют некоторые важные скобки; в первоисточнике в начале этой строки есть ведущая фамилия.

Но вы не должны пытаться отбирать куски из реализации SRFI вручную, по крайней мере, до тех пор, пока вы не познакомитесь со Схемой. Упростите загрузку всей библиотеки.

...