Реболь: как разбить строку на символы - PullRequest
2 голосов
/ 10 июля 2019

Используя Rebol, как мне разбить эту строку на символы (без использования c-like подхода с циклами)? Я использую версию 2.7.8.2.5, в которой нет метода split.

ул: "Сегодня понедельник"

Я хочу разбить вышесказанное на:

['T' 'o' 'd' 'a' 'y' '' 'i' 's' '' 'M' 'o' 'n' 'd' 'a' 'y']

Parse метод, кажется, только разбивает предложение на составляющие слова.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 июля 2019

Если вы не хотите использовать циклы, есть один хитрый трюк:

>> head extract/into str 1 []  
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]

OTOH, string! - это уже серия значений char!, поэтому разбиение его на такие символы не дает явного преимущества.

3 голосов
/ 10 июля 2019

В некоторых Rebols (не Rebol2) вы можете использовать MAP-EACH для этого, например, map-each ch str [ch] .

В Rebol2, COLLECT и KEEP являются довольно общими и мощными способами построения блоков:

>> collect [foreach c str [keep c]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]

Я дам вам это и позволю другим перечислить бесконечность более быстрых путей. : -)

0 голосов
/ 11 июля 2019

В зависимости от того, хотите ли вы получить отдельные символы или строки длиной один, вы также можете использовать parse со следующими правилами

>> str: "Today is Monday"
== "Today is Monday"
>> collect [  parse/all str [ some [ copy x  skip (keep x)    ]     ]]
== ["T" "o" "d" "a" "y" " " "i" "s" " " "M" "o" "n" "d" "a" "y"] 
>> collect [  parse/all str [ some [  x:  skip (keep x/1)    ]     ]]
== [#"T" #"o" #"d" #"a" #"y" #" " #"i" #"s" #" " #"M" #"o" #"n" #"d" #"a" #"y"]
...