Size: a a a

Scala User Group

2020 December 22

Oℕ

Oleg ℕizhnik in Scala User Group
Mihhail
сайт лежит
неправда
источник

A

Aaa4 in Scala User Group
Oleg ℕizhnik
arr.collect{ case x if x % 2 == 0 => x}
Спс. я вот этот IF  case x if x %2 == 0 еще бы долго пытался допереть что там нужен :(
источник

M

Mihhail in Scala User Group
теперь нет
источник

M

Mihhail in Scala User Group
в перый раз был недосегаем
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну сегнули бы в gist.github.com
источник

M

Mihhail in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ага, я понял проблему
к несчастью, решение этой проблемы требует подходов, которые могут оказаться проблемнее бойлерплейта
источник

Oℕ

Oleg ℕizhnik in Scala User Group
первый подход - это рекурсивные схемы (ищите droste scala), но т.к. вам нужно смотреть минимум на два уровня это уже не самый тривиальный рефолд, сходу не вспомню какой
источник

Oℕ

Oleg ℕizhnik in Scala User Group
второй подход не буду упоминать
источник

M

Mihhail in Scala User Group
хорошо, спасибо
источник

Oℕ

Oleg ℕizhnik in Scala User Group
но в принципе, можете воспользоваться хотя бы простой формой рексхем
источник

M

Mihhail in Scala User Group
рексхем - рекурсивные схемы имеется ввиду ? Да, сейчас читаю про них
источник

Oℕ

Oleg ℕizhnik in Scala User Group
типа

@deriveTraverse
sealed trait ExprTreeF[+A]
case class Num(n : Int) extends ExprTreeF[Nothing]
case class Sum[A](l: A, r: A) extends ExprTreeF [A]
...

берёте этот Fix
источник

Oℕ

Oleg ℕizhnik in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
получаете
type ExprTree = Fix [ExprTreeF]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
и дальше можете матчить
def simplify = tree match{
  case Fix(ft) => ft.map(simplify) match{
  case Sum(Fix(Num(_)), Sum(Fix(Num(_)), Fix (Num(_))) =>
 ...
 case other => other
}
источник

Oℕ

Oleg ℕizhnik in Scala User Group
т.е. в среднем получаете чуть больше бойлерплейта на ваших важных случаях, зато не нужно руками вызывать симплифай рекурсивно для поддеревьев
источник

M

Mihhail in Scala User Group
выглядит здорово! спасибо, буду сейчас пробывать!
источник

Oℕ

Oleg ℕizhnik in Scala User Group
только аннотацию правильную возьмите
deriveTraverse, а не autoFunctor
источник

Oℕ

Oleg ℕizhnik in Scala User Group
источник