- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
[Record] variant ItemPatternMatched: PatternMatchedBase, IPatternMatched
_matchByLexemeValue:option[string]
public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary):MatchResult
match(source)
|[] => MatchResult.EndOfLexemes(source, namedLinkDictionary)
|lexeme_::lexemes_=> def updatedNamedLinkDictionary = updateNamedLinkDictionary(lexeme_::[], namedLinkDictionary);
def failure = MatchResult.Failure(source, namedLinkDictionary);
def success = MatchResult.Success(lexemes_, updatedNamedLinkDictionary);
match(_matchByLexemeValue)
|None | Some(lexemeValue_) when (lexemeValue_==lexeme_._value) =>
match(this, lexeme_._type)
|(Symbol, SourceLexeme.Type.Symbol) | (Identificator, SourceLexeme.Type.Identificator) | (Number, SourceLexeme.Type.Number) =>
success
|_ =>
failure
|_ =>
failure
|Symbol
|Identificator
|Number
Начальник, посмотрев на код, сказал, что NemerleGovno. Я не знаю, что ему ответить?
LispGovno 30.10.2012 18:46 # 0
Фактически тут 3 конструктора:
Symbol|Identificator|Number
Каждый из них имеет один параметр _matchByLexemeValue:option[string], а ещё, хоть в данном случае их нет, но могут быть дополнительные параметры (также как в Scala или Haskell), свойственные конкретному из 3х конструкторов.
Это выглядело бы как-то:
Подозреваю, что не в Scala, не в Haskell такой красотки нет?
А ещё поддерживается наследование ADT от класса или от интерфейса, как мы видим в коде выше.
Такого уж точно нигде нет.
roman-kashitsyn 30.10.2012 19:03 # +2
> Такого уж точно нигде нет.
Scala: Haskell
LispGovno 30.10.2012 19:13 # 0
Тк, _matchByLexemeValue содержится во всех конструкторах ItemPatternMatched, то к нему можно обратится без матчинга, например:
def a = ItemPatternMatched.Symbol(None(), 'Y');
А дальше мы обращаемся к a._matchByLexemeValue как к обычному полю структуры и матчить, чтобы вытащить _matchByLexemeValue не нужно. Матчить понадобится только когда c или s или n захочется вытащить. А в Хаскеле в данном случае в любом случае придется матчить, не говоря уж о копипасте (Maybe String) в каждый конструктор и отсутствия именованности полей.
roman-kashitsyn 30.10.2012 19:17 # +1
Да. Можно, конечно функцию написать, или определить варианты через синтаксис записей (что лишит нас возможности паттерн-матчинга), но это не так удобно.
С другой стороны, в Haskell есть typeclasses, что гораздо лучше интерфейсов
LispGovno 30.10.2012 19:24 # 0
Здесь соглашусь. Сильнейшая штука. Жаль в Скале typeclasses эмулируют и реализуют только как паттерн-проектирования и в отличии от Хаскеля оно не встроено в язык (приходится многословить).
LispGovno 30.10.2012 19:26 # 0
Внутри все равно матчить придется. О(n) взамен O(1), но согласен, хоть многословно и не расширяемо, но решает.
roman-kashitsyn 30.10.2012 19:27 # +1
Что-то мне подсказывает, что O(log n), где n - число конструкторов
LispGovno 30.10.2012 19:35 # −1
А вообще в Хаскеле порядок case of вроде важен.
И подумай над тем, что O(log n) требует Ordering. Хотя... это глупость.
roman-kashitsyn 01.11.2012 15:02 # +3
Наглая ложь, минусуйте меня, минусуйте меня полностью! Для записей есть аж два синтаксиса паттерн-матчинга!
roman-kashitsyn 31.10.2012 12:14 # +4
LispGovno 31.10.2012 13:30 # −1
suc-daniil 02.11.2012 12:31 # +3
LispGovno 02.11.2012 12:45 # 0
Вообще если спросите, то пясню любую хрень.
bormand 02.11.2012 13:16 # +1
roman-kashitsyn 02.11.2012 13:19 # +2
LispGovno 02.11.2012 12:43 # 0
Кстати, поправил так: [lexeme_]
LispGovno 09.12.2012 22:26 # 0
сохраню и себе полный список статей и видео на тему nemerle
http://liveworkspace.org/
Гип гип Ура! Снова поднялся!
LispGovno 09.12.2012 22:37 # 0
http://85.25.109.216/
http://liveworkspace.org/code/description
LispGovno 09.12.2012 22:55 # +2
1)Поддержка ввода вывода на файловую систему пока до 1 мб.
2)Много языков, в том числе последний хацкел, D, gcc и clang
http://liveworkspace.org/code/requests
- здесь можно оставить просьбу на добавление языков и библиотек, типа буста в язык.
3)ввод\вывод на сокеты
4)параметры командной строки компилятора и программы и ввода пользователя
5)снипеты
6)личный кабинет
7)в перспективе поддержка файлов-проектов
8)инклудинг других исходных кодов в разрабатываемый код
9)форум
>p.s.
>IE не состоит в списке поддерживаемых браузеров. не сообщайте о IE-specific багах.
bormand 10.12.2012 00:34 # +1
Не боится, что станет платформой для рассылки спама или запуска эксплойтов?
LispGovno 10.12.2012 00:55 # 0
И это... Нужно сотню акков зарегать, и потом продавать за большие деньги, тк порты скоро закончатся. Там говорит каждому свой выдается.