- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary, settings:MatchSettings):MatchResult
def endMatchingBlockLexemesByType = settings._endMatchingBlockLexemesByType;
def endMatchingBlockLexemesByValue = settings._endMatchingBlockLexemesByValue;
assert([_beginOfMatchBlock, _endOfMatchBlock].ForAll(excludedItem => !endMatchingBlockLexemesByValue.Contains(excludedItem)));
def matchLexeme(amountOfEntryBlock=0, matchedLexemes=[], sourceTail=source)
|(0, _::_, _) => Some(matchedLexemes, sourceTail)
|(_, _, lexeme_::_) when endMatchingBlockLexemesByType.Contains(lexeme_._type) => None()
|(_, _, lexeme_::lexemes_) =>
match(lexeme_._value, amountOfEntryBlock)
|(value_, _) when endMatchingBlockLexemesByValue.Contains(value_) => None()
|(_beginOfMatchBlock, _) => matchLexeme(amountOfEntryBlock+1, lexeme_::matchedLexemes, lexemes_)
|(_endOfMatchBlock, 0) => None()
|(_endOfMatchBlock, _) => matchLexeme(amountOfEntryBlock-1, lexeme_::matchedLexemes, lexemes_)
|(_, 0) => None()
|(_, _) => matchLexeme(amountOfEntryBlock, lexeme_::matchedLexemes, lexemes_)
|_ => None()
|_ => None()
match(matchLexeme())
|None => MatchResult.Failure(source, namedLinkDictionary)
|Some((matchedLexemes_, unmatchedLexemesTail_)) => MatchResult.Success(unmatchedLexemesTail_, updateNamedLinkDictionary(matchedLexemes_, namedLinkDictionary))
Вчера заглянул в свой код.
Есть один язык, так вот в нем паттерн-матчинг задается на уровне сигнатур функций.
В связи с тем, что я каждую ночь читал книгу по кулХацкелу, то то что там было написано - вьелось мне в подкоррку и я этого даже не заметил.
По ночам когда читаешь что-то, оно проникает в незащищенное подсознание. Я даже не ожидал, что напишу такой код. Но я его написал и только опосля понял, что с кодом что-то не так.
Беда пришла оттуда, откуда её не ждали.
Ещё я больше не могу без таких функций, как id или ($) или (.) или стрелочка\рыбка. Меня все это конечно раздражает... Мне кажется, что меня держут в клетке и не дают пользоваться правильными функциями.
Я всегда считал, что зашквар и профессиональная деформация может быть только от крестов.
Похоже я очень сильно ошибался и поплатился за это.
Что посоветуете?
LispGovno 01.11.2012 18:27 # −1
http://govnokod.ru/12031
создал временные переменные, а потом их использовал в качестве возвращаемых значений функции. То есть не зависимо от результата выполнения у меня всегда создавалась лишние переменные, которые могли бы не создаваться и нетратить лишнее процессорное время на это каждый раз в глубоко вложеннном цикле и темболее не создавалась бы работа для сборщика мусора, постоянно удаляющего эти лишние ненужные переменные.
А привычка то появилась, после того, как посидел в ленивом языке Haskell, в котором эти лишние переменные создаваться бы не стали, тк их не использовали.
LispGovno 01.11.2012 19:15 # −1
, то сколько кода это займёт на императивном или любом другом нормальном языке или просто в красивом стиле?
Функция просто ищит в потоке лексем первой лексемой _beginOfMatchBlock (например открывающася скобка). Если не нашла, то возвращает фейл, а если нашла, то смотрит, пропуская прочие лексемы, пока есть открывающиеся скобки и так находит последнюю парную закрывающуюся скобку (_endOfMatchBlock). Если список лексем закончился раньше, нахождения парной скобки, то засчитывает слив. В случае поражения возвращает список лексем неизменным, а если успех, то возвращет остаток лексем. Факт слива тоже возвращается.
Fai 01.11.2012 19:29 # +4
LispGovno 01.11.2012 19:34 # 0
bormand 01.11.2012 19:39 # +4
LispGovno 01.11.2012 23:32 # −4
Посоны, может в этом коде нет говна? Вот 2 человека мне уже пытаются льстить. Я уже начинаю верить, что я прав, а просто 5 человек, что проплюсовали - типичное быдло, что не понимает в функциональный код?
Кто тут четкие функциональщики, рассудите а?
Вот мне уже начинает казатся, что код написан хорошо и правильно. И я его даже могу читать легко.
Между прочим код чистый и даже без исключений. Что ещё нужно?
bormand 02.11.2012 08:55 # +2
> |(0, _::_, _)
Это паттернматчинг по аргументам функции?
> ::
Что делает этот оператор?
bormand 02.11.2012 09:02 # +2
LispGovno 02.11.2012 09:43 # +1
LispGovno 02.11.2012 09:52 # 0
>Это паттернматчинг по аргументам функции?
Да. Писать match(переменная) в функции не нужно, если первый же оператор матчинг "|".
Матчинг доступен, тк все функции каррированны, поэтому аргументы представляют собой один кортеж. Поэтому это матчинг по одной переменной. Фактически ты можешь вызвать функцию f(args), если args - кортеж из аргументов, а можешь написать f(arg1,arg2,...).
>> ::
>Что делает этот оператор?
Cons из lisp, : из Haskell. То есть добавление элемента в список.
LispGovno 02.11.2012 09:55 # 0
Я тоже так думал, но крайне мощное метапрограммирование (лисп и рядом не стоял) и вывод типов позволило и ещё позволит сделать очень широкую автоматизированную библиотеку. Фактически весь язык и вся стандартная библиотека уже написана на макросах. Жаль метапрограммировать тяжело на нем. Я пока не осилил. Но использование готового (из автоматизации, расширенных проверок во время компиляции и библиотек) уже даёт о себе знать.
roman-kashitsyn 02.11.2012 12:48 # +3
Если полистать блог хацкеля на хабре, легко заметить, что 99% статей - решение абстрактных студентозадач в вакууме, и лишь 1% - реальные success-story, от которых захватывает дух.
Хотел бы я, чтобы было меньше споров о крутотени ФЯ и больше действительно удобного софта, написанного на этом отличном (с моей точки зрения) семействе языков.
Fai 02.11.2012 14:24 # 0
LispGovno 02.11.2012 15:10 # 0
Fai 02.11.2012 15:26 # +1
И кстати, вместе с mono никаких проблем не будет?
Fai 02.11.2012 15:30 # +1
fxd
LispGovno 02.11.2012 15:46 # +1
Запускать скомпилированные программы под моно можно, а вот компилятор под моно не работает. Может в новых версиях моно исправили это, но сомневаюсь. Класс ответственный за emit кода в моно с багами. Не соответствует .net'овскому. Под JVM вроде порт компилятора скоро выйдет (может уже вышел), так что тоже в перспективе не проблема.
Подсветка, автодополнение кода, формашлепка в студии работает хорошо для опенсорсного свободного продукта.
LispGovno 02.11.2012 15:47 # 0
Чем?
Fai 02.11.2012 15:51 # +1
Из плюсов (конкретно для меня):
+ Необычный синтаксис
+ Множество возможностей
+ Мультипарадигмальность
+ Удобная работа в системе Windows
Из минусов (опять-же, для меня):
- Привязка к .NET
- Документации меньше, чем к тому-же хаскелю
- Огромные проблемы с программированием на Nemerle в Linux
Есть ли что-нибудь похожее, но без этих недостатков?
LispGovno 02.11.2012 16:01 # +2
Программировать под линухом можно, но в каком-нибудь вайне скорее всего или виртуальной машине.
По способностям близок только Lisp, кроме того, что он динамически типизированный. Может быть таким же мультипарадигменным. И так же сильно метапрограммировать, как и Nemerle.
Из альтернатив:
F#/OCaml или Scala
Но вроде как 2 парадигмы в обоих и не более. Притом первый больше поощряет ФЯ. Про второй Роман тебе расскажет.
Fai 02.11.2012 16:12 # +2
Т.е. я соберу под вайном хеловорлд.ехе и потом его тоже запущу под вайном? No way.
LispGovno 02.11.2012 16:22 # 0
Нет, запустишь под моно в линухе без вайнов.
bormand 02.11.2012 16:35 # +6
Хватит уже метапрограммировать, найди себе девушку.
LispGovno 02.11.2012 16:37 # −1
LispGovno 02.11.2012 16:44 # −2
roman-kashitsyn 02.11.2012 16:50 # +1
LispGovno 02.11.2012 17:15 # 0
Lure Of Chaos 05.11.2012 23:48 # +5
В жизни всё происходит через жопу - сначала ты добиваешься девушки, потом находишь как-нибудь от нее избавиться.
LispGovno 06.11.2012 00:01 # −2
LispGovno 06.11.2012 07:07 # −2
eth0 06.11.2012 21:12 # +5
LispGovno 06.11.2012 21:41 # +1
3.14159265 06.11.2012 21:50 # +1
>потом находишь как-нибудь от нее избавиться
Показать fluent-interface. Не:?
bormand 06.11.2012 22:56 # +1
Устройство монады IO. Правда есть возможность, что она обладает настолько извращенным сознанием, что ей это понравится... тогда пункт про избавление можно и отменить.
LispGovno 06.11.2012 22:59 # −1
Пффф. Нашел чем пугать. Да и монда IO её врятли испугает. Счас подумаю, что есть посложнее...
3.14159265 07.11.2012 18:38 # +1
>Пффф. Нашел чем пугать.
Я вот и говорю никакой ты не олдфаг, а простое гумно, которое начиталось старых тредов.
Только неофитов и долбоёбов, которым нечего больше обсуждать заботят вопросы "олдфажности", люди которые тут сидят с самого начала никогда этим не кичились.
bormand 07.11.2012 18:52 # +1
Кофнуций.
Fai 10.11.2012 06:14 # 0
bormand 10.11.2012 07:57 # 0
roman-kashitsyn 02.11.2012 16:17 # +2
Если интересно именно метапрограммирование и функциональность, можно поглядеть Clojure, он тоже на JVM.
Как вариант можно посмотреть Haskell (разрыв шаблона гарантирован), он относительно кроссплатформенный.
LispGovno 02.11.2012 16:25 # 0
Даже без Template Haskell разрыв гарантирован, но метапрограммирование там не на что негодное. Я бы даже сказал, его нет. Но разрывы действительно будут.
А если программировать с Template Haskell, то сказать не могу, возможно будет хорошое метапрограммирование, но я его пока не осилил. Ожидаю, что будут разрывы разрывов.
bormand 02.11.2012 17:26 # +4
У меня интерес к метапрограммированию угас после увлечения лиспом. Поигрался, поюзал все эти приемы... и вдруг понял, что ставлю грабли человеку читающему этот код.
Да, метапрограммирование удобно в библиотеках, в которых надо реализовать какой-то изврат, чтобы сделать их использование более-менее удобным. Но в самих программах оно только запутывает того, кто будет поддерживать код.
roman-kashitsyn 02.11.2012 18:05 # +3
Именно, не нужно забывать, что "мета"-код занимает лишь малую часть приложения и нужен довольно редко (@bormand верно подметил: в основном, в библиотеках). При использовании с умом он может сэкономить много букв, но дорабатывать и чинить такой код сложнее. За всё нужно платить.
Подумайте о своих коллегах, которые будут ночью, просрочив дедлайны, допивая десятую чашку кофе коммитить хотфиксы (сам был в такой ситуации). Используйте сложные возможности языка в меру. Пишите максимально понятный код. Хорошенько тестируйте то, что написали. Пожалуйста...
Fai 02.11.2012 23:09 # 0
IDE не надо. Пишу в sublime text 2, собираю из него же.
>> Если интересно именно метапрограммирование и функциональность
Только функциональность интересует.
Правда займусь хаскелом, тем более компилятор есть и он кроссплатформенный. Да и sublime text подсвечивает.
Буду благодарен если подкинете материалов для плавного изучения с нуля. Желательно что-то попроще трудов Кнута.
roman-kashitsyn 02.11.2012 23:13 # +2
Fai 02.11.2012 23:29 # +3
roman-kashitsyn 03.11.2012 01:32 # +3
Lure Of Chaos 05.11.2012 23:49 # 0
не факт
LispGovno 06.11.2012 00:00 # −1
Неужели вы? Моё почтение. :)
LispGovno 03.11.2012 07:46 # −2
>просветлённый
LispGovno 04.11.2012 20:23 # −1
[Недописал коммент.]
LispGovno 03.11.2012 00:50 # −3
Тогда зачем пошел Хаскель учить, спрашивается? Кроме факториалов на нем ничего не считают. Полезная функциональность отсутствует. Scala и то функционально полезнее.
Fai 03.11.2012 02:12 # −3
> функциональщина интересует
fxd
bormand 04.11.2012 09:09 # +3
Fai 05.11.2012 04:09 # +2
Ваш пост огорчает Столлмана.
bormand 05.11.2012 08:00 # +1
Тем не менее Столлман давно уже ничего не разрабатывает.
LispGovno 06.11.2012 22:02 # +2
Но даже спустя довольно многое время, если человек приходил и говорил, что он насрал и предлагал на это посмотреть. Его люто бешенно минусовали. Также минусовали, когда ОП предлагал посмотреть на любую синтетику или не говнокод. Особо остервенелые возмущались, когда С постили в раздел С++. Такое просто не могли простить не при каких обстоятельствах, врываясь в тред и возмщенно крича: "Где здесь С++, %nickname%?"
Сегодня говнокод уже не торт. Здесь постят код на разных языках и показывают на какахи в проектировании самого языка при этом нарушают все правила что только можно, в том числе постят синтетику без говнокода. И вы понимаете, их плюсуют! Со всей ответственностью старожила уютненького, стоявшего у истоков, заявляю: Это не здоровая канитель, господа.
3.14159265 06.11.2012 22:11 # +5
На ресурсе всегда был небольшой процент долбоёбов.
Отличить одних от других - проблематично. Долбоёбы они как сорта гумна для нормального человека неотличимы по виду и запаху.
>Со всей ответственностью старожила уютненького
И без подтверждений своих слов ты не старожил, и даже не простой хуй, ты просто Гумно.
>Ньюфаги конечно этого не знают.
>старожила уютненького
А-а-а. Не смеши меня.
LispGovno 06.11.2012 22:46 # +1
Рассказать историю говнокода? События могу иметь не верный порядок, но было примерно так:
Сначала можно было постить говнокоды и комменты от гуеста, притом указывать ник прямо как на борде прямо при вводе поста\комента. Вроде даже и капчи не было. (На сколько я помню её ввели не для защиты от спам ботов, а для защиты от долбоёбов о_О много позже). И внимание: ник по дифолту был указан в поле ввода не гуест, а Говногость. Минусовать и плюсовать можно было даже гуестам, при том как топики, так и коменты (на +-1).
Если говнокод уходил в минуса (порога не помню, но -1 помоему было достаточно ), то появлялась расстроенная мусорка над говнокодом и отсчитывала дату(время в часах если день последний) до удаления (две недели - день (точнее период не скажу, запамятовал)). Возможно не помню, тк этот период менялся.
LispGovno 06.11.2012 22:46 # +1
defecate-plusplus 06.11.2012 22:58 # +5
если случается говно - так рахитектурное, которое и на 10 страницах не уместить
вот и остается синтетику рассматривать
я тут обнаружил, что знаком лично с человеком из первого полтинника - тесен мир:)
LispGovno 06.11.2012 23:01 # −1
defecate-plusplus 06.11.2012 23:09 # +6
а ботов заводит у нас только тарас - причинять справедливость, если кто опрометчив к его божественным языкам
но он молод, горяч и из купчино, так что придется понять и простить
> мои не учатся
так ведь надо учить, если есть возможность и полномочия
TarasB 07.11.2012 09:42 # +3
LispGovno 06.11.2012 23:02 # −1
С Интернета можно. С его просторов.
Элсо мои не учатся. Пишут также покакивая. :(
eth0 07.11.2012 18:14 # +1
bormand 06.11.2012 23:08 # +2
ШОК!! Раскрыта тайна века! Страйко == Абу. ЧИТАТЬ ДАЛЕЕ>>>
inkanus-gray 07.11.2012 03:49 # +1
LispGovno 07.11.2012 08:03 # −1
3.14159265 08.11.2012 17:23 # +1
но был быстро поставлен на место http://govnokod.ru/7736#comment105183
и другой чудак Макса Прохорова форсил, а потом обосрался перед всем говнокодом.
И ты повторяешь ту же ошибку. Ты старые треды забудь. Говнокод - это не геймдев, это не двач, таких "олдфагов" как ты тут презирают.
3.14159265 07.11.2012 18:51 # +2
Говно со скольки лет употребляешь в пищу?
>По истории долбоёбовм не спрашивайте, я за ними не следил
Я тебе объясняю - и в прежние времена хватало пользователей примечательных своими занудством и тупостью, похожих на тебя.
Посему сказать наверняка сколько залетных мудаков тут кукарекало решительно нельзя.
Да и никому это нахер не надо - помнить когда тут зарегался очередной школьник.
> а для защиты от долбоёбов о_О много позже
Неправда. Твои ж посты капча пропускает.
3.14159265 07.11.2012 18:58 # +3
а) зайти под своим самым старым id и написать пруфпост
б) выложить сохраненный тред со старым дизайном.
Есть еще третий способ, с которым ты будешь признан олдфагом:
в) сфоткаться поедающим говно на фоне гк, с супом:
"Я, Гумно Лиспович, находясь в здравом уме и твердой памяти, торжественно заявляю, что я олдфаг".
bormand 07.11.2012 19:51 # +3
3.14159265 07.11.2012 20:22 # +3
Но сходство поразительно!
eth0 07.11.2012 21:15 # +3
(И не спрашивайте меня, зачем я их сохранял. Хотя, на самом деле всё просто. Я хотел применить эти секретные технологии для обфускации ПХПшного кода.)
3.14159265 07.11.2012 21:17 # +1
eth0 08.11.2012 18:23 # +2
bormand 07.11.2012 21:36 # +2
[заговор]Чтобы в будущем получить статус олдфага.[/заговор]
bormand 06.11.2012 22:59 # +2
Достаточно посмотреть первые посты, в которых дробные оценки и говны от гостей. Даже такой ньюфажина как я об этом знаю. (Хотя до этого момента я думал, что говнокоды от гостей это баг возникший при давнишней перезаливке базы).
> в том числе постят синтетику без говнокода
Годная синтетика стоит десятка индусских кодов.
inkanus-gray 07.11.2012 03:48 # +3