Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / StringBuffer в Scheme / 7 сообщений из 7, страница 1 из 1
02.05.2012, 19:04
    #37779527
h869311
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
В Java есть очень удобный класс для работы с изменяемыми строками -- StringBuffer.
Подскажите, есть ли средства для работы со строками в Scheme, которые реализуют
возможности getChar, setCharAt, то есть, чтобы была возможность получить i-ый символ
в строке и установить его? Да, кстати, нумерация символов в строке в Scheme начинается
с нуля или единицы?
...
Рейтинг: 0 / 0
02.05.2012, 19:41
    #37779570
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
h869311,

StringBuilder в Java не совсем для этого был сделан, а так строки в Scheme изменяемы:

Код: plaintext
1.
2.
3.
4.
5.
6.
> (define s "a")
> (string-ref s 0)
#\a
> (string-set! s 0 #\b)
> s
"b"

Правда в Racket они по-умолчанию немутабельны, подробности в документации.
Нумерация с нуля.
...
Рейтинг: 0 / 0
02.05.2012, 19:49
    #37779581
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
Хм... странно, раньше вроде литералами создавались мутабельные строки. В общем вот для разных диалектов в Racket:

Код: plaintext
1.
2.
3.
4.
5.
6.
#lang racket

(define s (make-string 3 #\*))
(string-set! s 0 #\a)
(string-set! s 1 #\b)
(display s)

Код: plaintext
1.
2.
3.
4.
5.
6.
#lang r5rs

(define s (make-string 3 #\*))
(string-set! s 0 #\a)
(string-set! s 1 #\b)
(display s)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#lang r6rs

(import (rnrs)
        (rnrs mutable-strings (6)))

(define s (make-string 3 #\*))
(string-set! s 0 #\a)
(string-set! s 1 #\b)
(display s)
...
Рейтинг: 0 / 0
02.05.2012, 20:00
    #37779590
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
Интересно, похоже это implementation-dependent, сейчас попробовал в Gambit:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
~ $ gsi
Gambit v4.6.5

> (define s "***")
> (string-set! s 0 #\a)
> (string-set! s 1 #\b)
> (display s)
ab*
> (string-set! "***" 1 #\b) 
>   ; никаких ошибок
...
Рейтинг: 0 / 0
02.05.2012, 20:07
    #37779596
h869311
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
А как сделать перенос строки, если она некрасиво смотрится на одной строке,
но так, чтобы туда не поместились ненужные символы, вроде переноса строки и возврата каретки?
...
Рейтинг: 0 / 0
02.05.2012, 20:12
    #37779601
h869311
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
просто в Java можно было сделать "abc"
+ "def"
и все в порядке
...
Рейтинг: 0 / 0
02.05.2012, 20:50
    #37779620
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringBuffer в Scheme
h869311А как сделать перенос строки, если она некрасиво смотрится на одной строке,
но так, чтобы туда не поместились ненужные символы, вроде переноса строки и возврата каретки?

Они туда поместятся, так же как и в джаве, как иначе-то? разница в способе печати

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#lang r5rs

(define (print-by proc)
  (lambda (s)
    (proc s)
    (newline)
    (newline)))

(define new-line (string #\Newline))

(for-each (print-by display)
          (list "abc\ndef"
                (string-append "abc" "\n" "def")
                (string-append "abc" new-line "def")))

(for-each (print-by write)
          (list "abc\ndef"
                (string-append "abc" "\n" "def")
                (string-append "abc" new-line "def")))

; =>

Добро пожаловать в DrRacket, версия 5.2.1 [3m].
Язык: r5rs; memory limit: 1024 MB.
abc
def

abc
def

abc
def

"abc\ndef"

"abc\ndef"

"abc\ndef"

> 
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / StringBuffer в Scheme / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]