[RUBY] Plage de caractères / plage de chaînes de caractères

J'étais curieux de connaître le comportement de la gamme de cordes de Crystal, j'ai donc étudié diverses choses dans d'autres langues.

Perl

% perl -v | head -2 | tail -1
This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux
% perl -e 'print chr ++($foo = ord "Z");'
[
% perl -e 'print ++($foo = "Z");'
AA
% perl -e 'print "A".."Z";'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
% perl -e 'print "A".."z";'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

C'est intense.

% perl -e 'print "a".."Z";'
abcdefghijklmnopqrstuvwxyz
% perl -e 'print "ZZ".."z";'
%

Ruby

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin13]
> "Z".ord.succ.chr
=> "["
> "Z".succ
=> "AA"
("A".."z").to_a
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
> ("A".."AA").to_a
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA"]
> ("ZZ".."z").to_a
=> ["ZZ"]

Python

$ python -V
Python 3.4.2
In [1]: x = ord("Z"); x += 1; chr(x)
Out[1]: '['

Ne peux pas.

Une telle syntaxe n'existe pas, mais elle peut être écrite.

for x in range(ord("A"), ord("[")):
    print(chr(x), end="")
#=> ABCDEFGHIJKLMNOPQRSTUVWXYZ

Vous pouvez également utiliser string.ascii_letters avec ʻimport string`, mais uniquement dans le cas de l'alphabet.

for x in string.ascii_letters:
    print(x, end="")
#=> abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Ne peux pas.

Langue D

% dmd -v | head -1
DMD64 D Compiler v2.068.0
import std.stdio;

void main()
{
  char x;
  (++(x = 'Z')).writeln;
}
% rdmd x.d
[
import std.stdio;
import std.string;

void main()
{
  "Z".succ.writeln;
}
% rdmd xx.d
AA
import std.stdio;
import std.range;

void main()
{
  iota('A', '[').writeln;
}
% rdmd xxx.d
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Ne peux pas.

Crystal

% crystal -v
Crystal 0.7.7 [170f859](Sat Sep  5 02:53:51 UTC 2015)
puts 'Z'.succ
% crystal x.cr
[
puts "Z".succ
% crystal x.cr
AA
% cat xx.cr
p ('A'..'z').to_a
% crystal xx.cr
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

C'est bon.

% cat xxx.cr
p ("A".."Z").to_a
% crystal xxx.cr
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

Cas de problème.

% cat xxx.cr
p ("A".."z").to_a

"A" -> "Z" -> "AA" -> "ZZ" -> "AAA" -> "AAA .." -> "ZZZ .." est appelé indéfiniment.

% crystal xxx.cr
^C

Commentaire général

L'implémentation de la plage de chaînes est assez différente. Je ne l'ai pas mise ici, mais Julia et Elixir ne semblent pas implémenter la plage de chaînes ou l'équivalent de String # succ.

Recommended Posts

Plage de caractères / plage de chaînes de caractères
Diverses opérations de chaîne de caractères
Affichage de la chaîne de caractères de type résultat BLAST
Date et heure ⇔ chaîne de caractères
Caractère f Python (chaîne formatée)
intervalle
Format de chaîne
Python UTC ⇔ JST, chaîne de caractères (UTC) ⇒ Mémo de conversion JST
# 5 [python3] Extraire des caractères d'une chaîne de caractères
Format de chaîne 2
[Python] Comment inverser une chaîne de caractères
[Mémo du débutant Python] chaîne de caractères python, opération de chemin
Résumé de la chaîne de caractères 1
Code de caractère
[Pandas] Développer les chaînes de caractères en DataFrame
chaîne brute
Grammaire de base de la série Python3 (chaîne de caractères)
Chaîne Python
Cours de base Python (4 types numériques / type chaîne de caractères)
[PowerShell] Obtenez la lecture de la chaîne de caractères
J'ai essayé de générer une chaîne de caractères aléatoire
"Chaîne de caractères parentaux" Résumé de l'exemple d'implémentation d'un analyseur simple