- 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 или ($) или (.) или стрелочка\рыбка. Меня все это конечно раздражает... Мне кажется, что меня держут в клетке и не дают пользоваться правильными функциями.
Я всегда считал, что зашквар и профессиональная деформация может быть только от крестов.
Похоже я очень сильно ошибался и поплатился за это.
Что посоветуете?