На схеме R5RS определение-синтаксис игнорируется?

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

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

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

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

Это определено с

define-syntax let-string-start+end

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

1 ответ

Решение

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

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

(#%require srfi/13)

Странно выглядящий #%require это специфическая для Racket ловушка, которая позволяет программе 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 вручную, по крайней мере, пока вы не будете более знакомы со Схемой. Упростите загрузку всей библиотеки.

Другие вопросы по тегам