2014-11-26 2 views
0

Я имею дело с векторами и пытаюсь использовать sort! функция, которая указана here. Однако я получаю ошибку идентификатора несвязанного идентификатора. В верхней части редактора я указал (а):Использование сортировки! функция в DrRacket

#lang scheme 

Следует ли загружать другой модуль для использования этой функции?

ответ

1

Просто определить свой собственный sort! используя синтаксический расширение:

(define-syntax-rule (sort! lst p ...) 
    (set! lst (sort lst p ...))) 

затем

> (define lst1 '(3 2 1 0)) 
> (sort! lst1 <) 
> lst1 
(0 1 2 3) 
3

Направленная документация предназначена для схемы MIT, вы используете ракетку с языком #lang scheme. Используйте sort процедуру вместо этого, который возвращает новый отсортированный список:

(define lst1 '(3 2 1 0)) 
(define lst2 (sort lst1 <)) 

lst1 
=> '(3 2 1 0) 

lst2 
=> '(0 1 2 3) 

Если вам нужно изменить список ввода после сортировки, используйте:

(define lst1 '(3 2 1 0)) 
(set! lst1 (sort lst1 <)) 

lst1 
=> '(0 1 2 3) 
+0

Спасибо, но мне нужно использовать функцию 'sort!'. – mtyurt

+3

@mtyurt Это _exactly_ равнозначно 'sort!': '(Set! Lst (sort lst <))', почему бы вам не использовать его? –

2

Документация связывании для mit- а не Ракету. Документация Ракетка здесь: http://docs.racket-lang.org/search/index.html?q=sort

Обратите внимание, что схема в схеме #lang не означает R5RS или R6RS, а скорее «MzScheme язык». В настоящее время большинство людей используют ракетку #lang.

#lang scheme 
(require rnrs/sorting-6) 

(define v (vector 5 3 2)) 
(vector-sort! < v) 
v 

Если вы хотите использовать R6RS с Ракетка здесь пример:

#!r6rs 
(import (rnrs lists (6)) 
     (rnrs base (6)) 
     (rnrs io simple (6))) 
(display (find even? '(3 1 4 1 5 9))) 
+0

У меня есть 800 строк экспериментального кода, и ваше решение вызвало некоторые проблемы. – mtyurt

+4

@mtyurt Это очень плохо. Вы должны быть более конкретными в отношении того, что «вызвало» и «некоторые проблемы». –

0

DrRacket (или просто рэкет в CLI) - это реализация на нескольких языках. Самое странное, что #lang scheme (или просто #!scheme) не соответствует стандарту Схемы, но является устаревшим названием языка, совместимого с R5RS, но изменил его имя на #!racket и имеет неизменяемые пары в качестве стандарта.

Другие языки, поддерживаемые программой ракетки, которая использует измененные пары: #!r5rs и #!r6rs. Они следуют стандарту Scheme, и если вы используете их, вы можете компилировать и запускать свои программы с другими реализациями. Просто изменив первую строку на то, что вы говорите, что остальная часть этого файла будет запрограммирована на этом языке. R6RS имеет vector-sort в то время как R5RS нуждается в поддержке со стороны SRFI-95 sort library «s sort!

PS: Если вы следуете SICP вы можете быть заинтересованы в #lang planet neil/sicp. See here if you need help getting it to work.

Смежные вопросы