|
Автор |
Сообщение |
Konstantin
Завсегдатай
Зарегистрирован: 01.05.2006 Сообщения: 615
|
|
|
|
Есть абсолютно мертвый в продакшене отечественный язык Рефал.
Выносит мозг с точки зрения парадигмы программирования напрочь.
Но когда въезжаешь - писать на нем одно удовольствие ленивые программы, особенно парсеры.
Чтобы въехать читаем в следующей последовательности
http://ulm.uni.udm.ru/~soft/wiki/doku.php?id=refal-5:korsa
потом
http://refal.net/doctrain.html ( пособия Турчина и Корлюкова для интерпретатора Refal-5)
Самая продвинутая реализация - это Refal plus
http://rfp.botik.ru/russian-links
Книжка Гурина и Романенко несколько академична для не математика, но после отработки нескольких примеров в Eclipse все башке становится ясным и понятным.
Получаются очень коротенькие проги, которые транслируются в цельные страницы C++ ( дети разработчиков языка продолжают дело отцов). Так же vala и Genie делают в С. Рабочий транк транслятора здесь
http://svn.botik.ru/refal/to-imperative/trunk/
Там samples есть.
Короче Haskell, Sheme - для лентяев, но этот еще ленивее, когда текст надо перелопатить или замысловатые структуры данных. Надо только въехать. |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Посмотрел учебник Турчина - математику вспоминать нужно |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Konstantin
Завсегдатай
Зарегистрирован: 01.05.2006 Сообщения: 615
|
|
|
|
Жаль, что ему не удалось затмить sed. В Рефале конечно код более читабельный. Авторы на стыке 60-70х не додумались сделать из него потоковый редактор - сейчас бы был стандартом Unix-like. К сожалению, даже рефал-сообщество практически рассыпалось в Инете. Молодые разработчики языка с 2008 г. тоже ничего нового не выкладывали. А так Марковская модель программирования очень интересна, она ближе к человеческому мышлению образами, чем формулами и циклами. Попробуйте чуть поглубже поизучать sed - потом с головой не оторвешь. |
|
Вернуться к началу |
|
|
Konstantin
Завсегдатай
Зарегистрирован: 01.05.2006 Сообщения: 615
|
|
|
|
#! /bin/sed -rnf
# Laurent Le Brun <laurent [at] le-brun.eu> - 2007
:loop
s/^(.)(.*)\1$/\2/
tloop
/../{
i The word is NOT a palindrome
b end
}
i The word is a PALINDROME
:end
d
Решение классической задачи по определению палиндрома. Гениально просто, если читаешь регулярные выражения!!!
Делаем файл pal.sh исполняемым и командуем
echo alla | ./pal.sh
То есть проверили, палиндром ли alla
Последний раз редактировалось: Konstantin (Вс Июн 23, 2013 5:59 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Konstantin
Завсегдатай
Зарегистрирован: 01.05.2006 Сообщения: 615
|
|
|
|
разбор полетов
:loop
s/^(.)(.*)\1$/\2/
tloop
Ищем первый символ строки и смотрим, равен ли он последнему
^(.) - это первый символ
\1$ - это первые скобки и проверка того, что первый равен последнему
(.*) - это середина без первого и последнего
/s/что ищем/ если нашли, то на это меняем
(.*) - это вторые скобки, то есть \2
Если проверка удалась, то подменяем введенную строку на середину без 1 и последнего символа. И снова цикл проверки.
/../{
i The word is NOT a palindrome
b end
}
i The word is a PALINDROME
:end
d
По результатам цикла в строке останется или один символ, или два разных.
/../{
i The word is NOT a palindrome
b end
}
вот так проверили, что символов два - и это не палиндром. /../ означает ЕСЛИ В СТРОКЕ ДВА СИМВОЛА
в противном случае символ один -и слово палиндром |
|
Вернуться к началу |
|
|
Konstantin
Завсегдатай
Зарегистрирован: 01.05.2006 Сообщения: 615
|
|
Вернуться к началу |
|
|
|
|