Jun. 23rd, 2022
Опять ничего не было. Плаваю, набираю метры. Сотни. Я ж тот еще пловец. В результате все время хочется жрать.
Поэкспериментировали со шторами в библиотеке и спальне. Пока что не пришли к решению.
Две ванные комнаты помыл, третья осталась. На фига нам столько? А куда деваться-то?
Еще у соседки Клаудии спросил, как они справляются с бассейном, нанимают кого? Да щас. Клаудия сама все и делает в смысле бассейна. Вот так, четыре собаки, пять машин, четверо детей, и еще и бассейн. И работа.
Поэкспериментировали со шторами в библиотеке и спальне. Пока что не пришли к решению.
Две ванные комнаты помыл, третья осталась. На фига нам столько? А куда деваться-то?
Еще у соседки Клаудии спросил, как они справляются с бассейном, нанимают кого? Да щас. Клаудия сама все и делает в смысле бассейна. Вот так, четыре собаки, пять машин, четверо детей, и еще и бассейн. И работа.
Еще возил с книжкой. Дофиксил скрипт, нашел багу. Исправил картинки. И пришла в голову идея выражать категорные конструкции прямо на скале. Ничо так. Вот, например:
def pullback[X, Y, Z](
xs: Set[X], ys: Set[Y], f: X => Z, g: Y => Z): Set[(X, Y)] =
for {
x <- xs
y <- ys if f(x) == g(y)
} yield (x, y)
def equalizer[X, Y](xs: Set[X], f: X => Y, g: X => Y): Set[X] =
for {
x <- xs if f(x) == g(x)
} yield x
def equalizerAsPullback[X, Y](xs: Set[X], f: X => Y, g: X => Y): Set[X] = {
type Z = (Y, Y)
val ys = xs map f // the set of values of f
val f_g: X => Z = (x: X) => (f(x), g(x))
val id_id: Y => Z = (y: Y) => (y, y)
pullback[X, Y, Z](xs, ys, f_g, id_id) map (_._1)
}
def pullbackAsEqualizer[X, Y, Z](xs: Set[X], ys: Set[Y], f: X => Z, g: Y => Z): Set[(X, Y)] = {
val xys = xs zip ys // this is cartesian product
equalizer[(X, Y), Z](xys, xy => f(xy._1), xy => g(xy._2))
}