Вопрос

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

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

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

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

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

define-syntax let-string-start+end

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

Это было полезно?

Решение

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

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

(#%require srfi/13)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top