Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Рефал

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Программирование/C/C++
 
Автор Сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Вс Мар 27, 2011 8:17 pm    Заголовок сообщения: Рефал
Ответить с цитатой

Есть абсолютно мертвый в продакшене отечественный язык Рефал.
Выносит мозг с точки зрения парадигмы программирования напрочь.
Но когда въезжаешь - писать на нем одно удовольствие ленивые программы, особенно парсеры.
Чтобы въехать читаем в следующей последовательности
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
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Мар 28, 2011 6:42 am    Заголовок сообщения:
Ответить с цитатой

Посмотрел учебник Турчина - математику вспоминать нужно Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Пн Апр 08, 2013 2:52 pm    Заголовок сообщения:
Ответить с цитатой

Жаль, что ему не удалось затмить sed. В Рефале конечно код более читабельный. Авторы на стыке 60-70х не додумались сделать из него потоковый редактор - сейчас бы был стандартом Unix-like. К сожалению, даже рефал-сообщество практически рассыпалось в Инете. Молодые разработчики языка с 2008 г. тоже ничего нового не выкладывали. А так Марковская модель программирования очень интересна, она ближе к человеческому мышлению образами, чем формулами и циклами. Попробуйте чуть поглубже поизучать sed - потом с головой не оторвешь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Konstantin

Завсегдатай


Зарегистрирован: 01.05.2006
Сообщения: 615

СообщениеДобавлено: Вс Июн 23, 2013 5:28 pm    Заголовок сообщения:
Ответить с цитатой

#! /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

СообщениеДобавлено: Вс Июн 23, 2013 5:41 pm    Заголовок сообщения:
Ответить с цитатой

разбор полетов

: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

СообщениеДобавлено: Ср Авг 28, 2013 10:40 am    Заголовок сообщения:
Ответить с цитатой

Это вообще высший пилотаж
https://github.com/bolknote/SedChess

Снимаю шляпу!!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Программирование/C/C++ Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис