История изменений
Исправление monk, (текущая версия) :
#!1
разбор шаблон =
длина = длина-строки шаблон
проход позиция результат в-скобках =
если
(позиция == длина)
значения результат позиция
(в-скобках && (шаблон[позиция] == #\} || шаблон[позиция] == #\,))
если пустой? $ оставшиеся результат тогда
значения диапазон(результат[0]) позиция
иначе
значения результат позиция
(шаблон[позиция] == #\{)
значения после-группы в-группе = прочитать-группу (позиция + 1)
проход после-группы слить(результат в-группе) в-скобках
(позиция < длина - 1 && шаблон[позиция] == #\\)
проход
позиция + 2
слить результат
список $ строка шаблон[позиция + 1]
в-скобках
иначе
проход
позиция + 1
слить результат
список $ строка шаблон[позиция]
в-скобках
прочитать-группу начало слова(пустой-список) =
значения слово остаток = проход начало '("") истина
если
(остаток == длина)
значения начало '("{")
(шаблон[остаток] == #\})
значения
остаток + 1
слова ++ слово
(шаблон[остаток] == #\,)
прочитать-группу
остаток + 1
слова ++ слово
иначе
значения начало '("{")
значения ответ _ = проход 0 '("") ложь
ответ
слить список . ещё-списки =
если пустой? ещё-списки тогда
список
иначе
применить слить
применить добавить
отобразить
функция (строка1)
отобразить
функция (строка2) $ строка1 ++ строка2
первый ещё-списки
список
оставшиеся ещё-списки
диапазон слово =
длина = длина-строки слово
конец = длина - 2
пусть цикл (позиция(1))
если
(позиция >= конец)
список слово
(слово[позиция] == #\. && слово[позиция + 1] == #\.)
если длина == 4 тогда
диапазон-символов
литера->число слово[0]
литера->число слово[3]
иначе
диапазон-чисел
подстрока слово 0 позиция
подстрока слово $ позиция + 2
иначе
цикл $ позиция + 1
диапазон-символов начало конец =
элемент число =
строка $ число->литера число
диапазон-элементов элемент начало конец
диапазон-чисел начало конец =
начальное-число = строка->число начало
конечное-число = строка->число конец
если точное-целое? начальное-число && точное-целое? конечное-число тогда
диапазон-элементов число->строка начальное-число конечное-число
иначе
начало ++ ".." ++ конец
диапазон-элементов элемент начало конец =
если
(начало > конец)
элемент начало : диапазон-элементов элемент (начало - 1) конец
(начало < конец)
элемент начало : диапазон-элементов элемент (начало + 1) конец
иначе
список $ элемент начало
> разбор "/path/to/{foo,ba{r..z}}.txt"
'("/path/to/foo.txt"
"/path/to/bar.txt"
"/path/to/bas.txt"
"/path/to/bat.txt"
"/path/to/bau.txt"
"/path/to/bav.txt"
"/path/to/baw.txt"
"/path/to/bax.txt"
"/path/to/bay.txt"
"/path/to/baz.txt")
> разбор "/path/to/{foo,ba{r,z}}.txt"
'("/path/to/foo.txt" "/path/to/bar.txt" "/path/to/baz.txt")
> разбор "~/{.local/share,.config,.cache}/{foo,bar}-package"
'("~/.local/share/foo-package" "~/.local/share/bar-package" "~/.config/foo-package" "~/.config/bar-package" "~/.cache/foo-package" "~/.cache/bar-package")
> разбор "foo-{15..1}"
'("foo-15" "foo-14" "foo-13" "foo-12" "foo-11" "foo-10" "foo-9" "foo-8" "foo-7" "foo-6" "foo-5" "foo-4" "foo-3" "foo-2" "foo-1")
Исправление monk, :
#!1
разбор шаблон =
длина = длина-строки шаблон
проход позиция результат в-скобках =
если
(позиция == длина)
значения результат позиция
(в-скобках && (шаблон[позиция] == #\} || шаблон[позиция] == #\,))
если пустой? $ оставшиеся результат тогда
значения диапазон(результат[0]) позиция
иначе
значения результат позиция
(шаблон[позиция] == #\{)
значения в-группе после-группы = прочитать-группу (позиция + 1)
проход после-группы слить(результат в-группе) в-скобках
(позиция < длина - 1 && шаблон[позиция] == #\\)
проход
позиция + 2
слить результат
список $ строка шаблон[позиция + 1]
в-скобках
иначе
проход
позиция + 1
слить результат
список $ строка шаблон[позиция]
в-скобках
прочитать-группу начало слова(пустой-список) =
значения слово остаток = проход начало '("") истина
если
(остаток == длина)
значения '("{") $ начало
(шаблон[остаток] == #\})
значения
слова ++ слово
остаток + 1
(шаблон[остаток] == #\,)
прочитать-группу
остаток + 1
слова ++ слово
иначе
значения '("{") $ начало
значения ответ _ = проход 0 '("") ложь
ответ
слить список . ещё-списки =
если пустой? ещё-списки тогда
список
иначе
применить слить
применить добавить
отобразить
функция (строка1)
отобразить
функция (строка2) $ строка1 ++ строка2
первый ещё-списки
список
оставшиеся ещё-списки
диапазон слово =
длина = длина-строки слово
конец = длина - 2
пусть цикл (позиция(1))
если
(позиция >= конец)
список слово
(слово[позиция] == #\. && слово[позиция + 1] == #\.)
если длина == 4 тогда
диапазон-символов
литера->число слово[0]
литера->число слово[3]
иначе
диапазон-чисел
подстрока слово 0 позиция
подстрока слово $ позиция + 2
иначе
цикл $ позиция + 1
диапазон-символов начало конец =
элемент число =
строка $ число->литера число
диапазон-элементов элемент начало конец
диапазон-чисел начало конец =
начальное-число = строка->число начало
конечное-число = строка->число конец
если точное-целое? начальное-число && точное-целое? конечное-число тогда
диапазон-элементов число->строка начальное-число конечное-число
иначе
начало ++ ".." ++ конец
диапазон-элементов элемент начало конец =
если
(начало > конец)
элемент начало : диапазон-элементов элемент (начало - 1) конец
(начало < конец)
элемент начало : диапазон-элементов элемент (начало + 1) конец
иначе
список $ элемент начало
> разбор "/path/to/{foo,ba{r..z}}.txt"
'("/path/to/foo.txt"
"/path/to/bar.txt"
"/path/to/bas.txt"
"/path/to/bat.txt"
"/path/to/bau.txt"
"/path/to/bav.txt"
"/path/to/baw.txt"
"/path/to/bax.txt"
"/path/to/bay.txt"
"/path/to/baz.txt")
> разбор "/path/to/{foo,ba{r,z}}.txt"
'("/path/to/foo.txt" "/path/to/bar.txt" "/path/to/baz.txt")
> разбор "~/{.local/share,.config,.cache}/{foo,bar}-package"
'("~/.local/share/foo-package" "~/.local/share/bar-package" "~/.config/foo-package" "~/.config/bar-package" "~/.cache/foo-package" "~/.cache/bar-package")
> разбор "foo-{15..1}"
'("foo-15" "foo-14" "foo-13" "foo-12" "foo-11" "foo-10" "foo-9" "foo-8" "foo-7" "foo-6" "foo-5" "foo-4" "foo-3" "foo-2" "foo-1")
Исправление monk, :
#!1
разбор шаблон =
длина = длина-строки шаблон
проход позиция результат в-скобках =
если
(позиция == длина)
значения результат позиция
(в-скобках && (шаблон[позиция] == #\} || шаблон[позиция] == #\,))
если пустой? $ оставшиеся результат тогда
значения диапазон(результат[0]) позиция
иначе
значения результат позиция
(шаблон[позиция] == #\{)
значения в-группе после-группы = прочитать-группу (позиция + 1)
проход после-группы слить(результат в-группе) в-скобках
(позиция < длина - 1 && шаблон[позиция] == #\\)
проход
позиция + 2
слить результат
список $ строка шаблон[позиция + 1]
в-скобках
иначе
проход
позиция + 1
слить результат
список $ строка шаблон[позиция]
в-скобках
прочитать-группу начало слова(пустой-список) запятая(ложь) =
значения слово остаток = проход начало '("") истина
если
(остаток == длина)
значения '("{") $ начало
(шаблон[остаток] == #\} && запятая)
значения
слова ++ слово
остаток + 1
(шаблон[остаток] == #\})
значения слово $ остаток + 1
(шаблон[остаток] == #\,)
прочитать-группу
остаток + 1
слова ++ слово
истина
иначе
значения '("{") $ начало
значения ответ _ = проход 0 '("") ложь
ответ
слить список . ещё-списки =
если пустой? ещё-списки тогда
список
иначе
применить слить
применить добавить
отобразить
функция (строка1)
отобразить
функция (строка2) $ строка1 ++ строка2
первый ещё-списки
список
оставшиеся ещё-списки
диапазон слово =
длина = длина-строки слово
конец = длина - 2
пусть цикл (позиция(1))
если
(позиция >= конец)
список слово
(слово[позиция] == #\. && слово[позиция + 1] == #\.)
если длина == 4 тогда
диапазон-символов
литера->число слово[0]
литера->число слово[3]
иначе
диапазон-чисел
подстрока слово 0 позиция
подстрока слово $ позиция + 2
иначе
цикл $ позиция + 1
диапазон-символов начало конец =
элемент число =
строка $ число->литера число
диапазон-элементов элемент начало конец
диапазон-чисел начало конец =
начальное-число = строка->число начало
конечное-число = строка->число конец
если точное-целое? начальное-число && точное-целое? конечное-число тогда
диапазон-элементов число->строка начальное-число конечное-число
иначе
начало ++ ".." ++ конец
диапазон-элементов элемент начало конец =
если
(начало > конец)
элемент начало : диапазон-элементов элемент (начало - 1) конец
(начало < конец)
элемент начало : диапазон-элементов элемент (начало + 1) конец
иначе
список $ элемент начало
> разбор "/path/to/{foo,ba{r..z}}.txt"
'("/path/to/foo.txt"
"/path/to/bar.txt"
"/path/to/bas.txt"
"/path/to/bat.txt"
"/path/to/bau.txt"
"/path/to/bav.txt"
"/path/to/baw.txt"
"/path/to/bax.txt"
"/path/to/bay.txt"
"/path/to/baz.txt")
> разбор "/path/to/{foo,ba{r,z}}.txt"
'("/path/to/foo.txt" "/path/to/bar.txt" "/path/to/baz.txt")
> разбор "~/{.local/share,.config,.cache}/{foo,bar}-package"
'("~/.local/share/foo-package" "~/.local/share/bar-package" "~/.config/foo-package" "~/.config/bar-package" "~/.cache/foo-package" "~/.cache/bar-package")
> разбор "foo-{15..1}"
'("foo-15" "foo-14" "foo-13" "foo-12" "foo-11" "foo-10" "foo-9" "foo-8" "foo-7" "foo-6" "foo-5" "foo-4" "foo-3" "foo-2" "foo-1")
Исправление monk, :
#!1
разбор шаблон =
длина = длина-строки шаблон
проход позиция результат в-скобках =
если
(позиция == длина)
значения результат позиция
(в-скобках && (шаблон[позиция] == #\} || шаблон[позиция] == #\,))
если пустой? $ оставшиеся результат тогда
значения диапазон(результат[0]) позиция
иначе
значения результат позиция
(шаблон[позиция] == #\{)
значения в-группе после-группы = прочитать-группу (позиция + 1)
проход после-группы слить(результат в-группе) в-скобках
(позиция < длина - 1 && шаблон[позиция] == #\\)
проход
позиция + 2
слить результат
список $ строка шаблон[позиция + 1]
в-скобках
иначе
проход
позиция + 1
слить результат
список $ строка шаблон[позиция]
в-скобках
прочитать-группу начало слова(пустой-список) запятая(ложь) =
значения слово остаток = проход начало '("") истина
если
(остаток == длина)
значения '("{") $ начало
(шаблон[остаток] == #\} && запятая)
значения
слова ++ слово
остаток + 1
(шаблон[остаток] == #\} && пустой? слова)
значения слово $ остаток + 1
(шаблон[остаток] == #\,)
прочитать-группу
остаток + 1
слова ++ слово
истина
иначе
значения '("{") $ начало
значения ответ _ = проход 0 '("") ложь
ответ
слить список . ещё-списки =
если пустой? ещё-списки тогда
список
иначе
применить слить
применить добавить
отобразить
функция (строка1)
отобразить
функция (строка2) $ строка1 ++ строка2
первый ещё-списки
список
оставшиеся ещё-списки
диапазон слово =
длина = длина-строки слово
конец = длина - 2
пусть цикл (позиция(1))
если
(позиция >= конец)
список слово
(слово[позиция] == #\. && слово[позиция + 1] == #\.)
если длина == 4 тогда
диапазон-символов
литера->число слово[0]
литера->число слово[3]
иначе
диапазон-чисел
подстрока слово 0 позиция
подстрока слово $ позиция + 2
иначе
цикл $ позиция + 1
диапазон-символов начало конец =
элемент число =
строка $ число->литера число
диапазон-элементов элемент начало конец
диапазон-чисел начало конец =
начальное-число = строка->число начало
конечное-число = строка->число конец
если точное-целое? начальное-число && точное-целое? конечное-число тогда
диапазон-элементов число->строка начальное-число конечное-число
иначе
начало ++ ".." ++ конец
диапазон-элементов элемент начало конец =
если
(начало > конец)
элемент начало : диапазон-элементов элемент (начало - 1) конец
(начало < конец)
элемент начало : диапазон-элементов элемент (начало + 1) конец
иначе
список $ элемент начало
> разбор "/path/to/{foo,ba{r..z}}.txt"
'("/path/to/foo.txt"
"/path/to/bar.txt"
"/path/to/bas.txt"
"/path/to/bat.txt"
"/path/to/bau.txt"
"/path/to/bav.txt"
"/path/to/baw.txt"
"/path/to/bax.txt"
"/path/to/bay.txt"
"/path/to/baz.txt")
> разбор "/path/to/{foo,ba{r,z}}.txt"
'("/path/to/foo.txt" "/path/to/bar.txt" "/path/to/baz.txt")
> разбор "~/{.local/share,.config,.cache}/{foo,bar}-package"
'("~/.local/share/foo-package" "~/.local/share/bar-package" "~/.config/foo-package" "~/.config/bar-package" "~/.cache/foo-package" "~/.cache/bar-package")
> разбор "foo-{15..1}"
'("foo-15" "foo-14" "foo-13" "foo-12" "foo-11" "foo-10" "foo-9" "foo-8" "foo-7" "foo-6" "foo-5" "foo-4" "foo-3" "foo-2" "foo-1")
Исходная версия monk, :
#!1
разбор шаблон =
длина = длина-строки шаблон
проход позиция результат в-скобках =
если
(позиция == длина)
значения результат позиция
(в-скобках && (шаблон[позиция] == #\} || шаблон[позиция] == #\,))
если пустой? $ оставшиеся результат тогда
значения диапазон(результат[0]) позиция
иначе
значения результат позиция
(шаблон[позиция] == #\{)
значения в-группе после-группы = прочитать-группу (позиция + 1)
проход после-группы слить(результат в-группе) в-скобках
(позиция < длина - 1 && шаблон[позиция] == #\\)
проход
позиция + 2
слить результат
список $ строка шаблон[позиция + 1]
в-скобках
иначе
проход
позиция + 1
слить результат
список $ строка шаблон[позиция]
в-скобках
прочитать-группу начало слова(пустой-список) запятая(ложь) =
значения слово остаток = проход начало '("") истина
если
(остаток == длина)
значения '("{") $ начало
(шаблон[остаток] == #\} && запятая)
значения
слова ++ слово
остаток + 1
(шаблон[остаток] == #\} && пустой? слова)
значения
слово
остаток + 1
(шаблон[остаток] == #\})
значения
слить '("{") (слова ++ слово) '("}")
остаток + 1
(шаблон[остаток] == #\,)
прочитать-группу
остаток + 1
слова ++ слово
истина
иначе
значения '("{") $ начало
значения ответ _ = проход 0 '("") ложь
ответ
слить список . ещё-списки =
если пустой? ещё-списки тогда
список
иначе
применить слить
применить добавить
отобразить
функция (строка1)
отобразить
функция (строка2) $ строка1 ++ строка2
первый ещё-списки
список
оставшиеся ещё-списки
диапазон слово =
длина = длина-строки слово
конец = длина - 2
пусть цикл (позиция(1))
если
(позиция >= конец)
список слово
(слово[позиция] == #\. && слово[позиция + 1] == #\.)
если длина == 4 тогда
диапазон-символов
литера->число слово[0]
литера->число слово[3]
иначе
диапазон-чисел
подстрока слово 0 позиция
подстрока слово $ позиция + 2
иначе
цикл $ позиция + 1
диапазон-символов начало конец =
элемент число =
строка $ число->литера число
диапазон-элементов элемент начало конец
диапазон-чисел начало конец =
начальное-число = строка->число начало
конечное-число = строка->число конец
если точное-целое? начальное-число && точное-целое? конечное-число тогда
диапазон-элементов число->строка начальное-число конечное-число
иначе
начало ++ ".." ++ конец
диапазон-элементов элемент начало конец =
если
(начало > конец)
элемент начало : диапазон-элементов элемент (начало - 1) конец
(начало < конец)
элемент начало : диапазон-элементов элемент (начало + 1) конец
иначе
список $ элемент начало
> разбор "/path/to/{foo,ba{r..z}}.txt"
'("/path/to/foo.txt"
"/path/to/bar.txt"
"/path/to/bas.txt"
"/path/to/bat.txt"
"/path/to/bau.txt"
"/path/to/bav.txt"
"/path/to/baw.txt"
"/path/to/bax.txt"
"/path/to/bay.txt"
"/path/to/baz.txt")
> разбор "/path/to/{foo,ba{r,z}}.txt"
'("/path/to/foo.txt" "/path/to/bar.txt" "/path/to/baz.txt")
> разбор "~/{.local/share,.config,.cache}/{foo,bar}-package"
'("~/.local/share/foo-package" "~/.local/share/bar-package" "~/.config/foo-package" "~/.config/bar-package" "~/.cache/foo-package" "~/.cache/bar-package")
> разбор "foo-{15..1}"
'("foo-15" "foo-14" "foo-13" "foo-12" "foo-11" "foo-10" "foo-9" "foo-8" "foo-7" "foo-6" "foo-5" "foo-4" "foo-3" "foo-2" "foo-1")