lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2007-01-24 07:30 pm

хотелки

Паттерн-матчинг в Haskell всё наворачивают.

А вот почему не сделают как в Прологе - если два идентификатора в паттерне совпадают, значит по этим позициям должны быть равные значения.

isDup (x:x:_) = True
isDup _       = False


аналогично более сложному

isDup (x:y:_) | x == y = True
isDup _                = False


И ещё! Не нравится мне, что при использовании многострочном объявлении функции приходится писать её название несколько раз.
А как было бы чудесно (объединяя оба примера)

isDup (x:x:_) = True
_     _       = False


Подчерк как повторение имени функции здесь условность, можно придумать что нибудь другое.
Это неважно.

[identity profile] thesz.livejournal.com 2007-01-24 04:36 pm (UTC)(link)
Это будет напоминать ситуацию с паттернами-числами - для них в Num введено требование Eq, и производится сравнение.

Иногда, говорят, мешает. Вот конкретно с числами это мешает переделать систему типов классов в более математическом стиле.

[identity profile] lomeo.livejournal.com 2007-01-24 04:49 pm (UTC)(link)
Как мешает, можно пример, а то я не понял?

Кстати, Eq там не обязателен. Пусть это будет аналогично сравнению с образцом, который не деривит Eq.

[identity profile] thesz.livejournal.com 2007-01-24 05:01 pm (UTC)(link)
f q = ... преобразуется в f x | x == Prelude.Num.fromInteger 1 = ...

Вот. Соответственно, Num нужем всюду, где есть числа, и Prelude требует серъёзной переделки для избавления от этого. Возможно, вместе с ghc.

Попробуй представсь себе полиморфный код, но без Eq.

f (x:x:_) = x

f [1,2]
f "Hello"

f [Just $ Data.Set.Set.fromList "Hello",Just $ Data.Set.Set.fromList "Hello"] ;)

Получится структурное сравнение, то же, что и получается при deriving Eq. ;)

[identity profile] lomeo.livejournal.com 2007-01-24 05:09 pm (UTC)(link)
спасибо. ты, как всегда, прав ;-)

[identity profile] thesz.livejournal.com 2007-01-24 05:32 pm (UTC)(link)
Barf: I know we need the money, but...
Lone Starr: Listen! We're not just doing this for money... We're doing it for a SHIT LOAD of money!
Barf: Oh, you're right. And when you're right, you're right. And you - you're always right.


http://imdb.com/rg/title-tease/quotes/title/tt0094012/quotes

;)

[identity profile] thesz.livejournal.com 2007-01-24 08:34 pm (UTC)(link)
Всё же, стоит заметить, что я только иногда бываю прав. ;)

На Lucky Starr не тяну, хотя и очень охота. ;)

[identity profile] lomeo.livejournal.com 2007-01-24 11:38 pm (UTC)(link)
спасибо за уточнение! поправляюсь: "ты, как иногда, прав!"

[identity profile] thesz.livejournal.com 2007-01-25 10:41 am (UTC)(link)
А! Я понял! Ты издеваешься! ;)

[identity profile] lomeo.livejournal.com 2007-01-25 10:51 am (UTC)(link)
Ты, как иногда, прав!

[identity profile] potan.livejournal.com 2007-01-24 04:50 pm (UTC)(link)
Прямо Рефал какой-то получается. Скоро дойдет до
isDup (x++x) = True
isDup _ = False

[identity profile] lomeo.livejournal.com 2007-01-24 05:08 pm (UTC)(link)
:-)) Кстати, идея!