
kana
18.07.2018
21:58:28
чет у меня мозги поплыли при попытке самому реализовать

A64m
18.07.2018
22:19:16
вроде такого? http://www.cse.chalmers.se/edu/course/pfp/Papers/PMCJFP.pdf
но, сейчас, наверное, получше есть на эту тему

kana
18.07.2018
22:23:52
о, спасибо

Google

Pig
18.07.2018
22:41:28
Stack уже deprecated или ещё нет?

Dmitry
18.07.2018
23:14:08
Уже нет

Ilya
19.07.2018
00:49:02
А где почитать почему тайпчекер не делает бектрекинг для констрейнтов в инстансах тайпклассов?

Denis
19.07.2018
03:14:07

Ilya
19.07.2018
05:57:10
Вопрос: а обилие частично определённых функций в стандартной библиотеке хаскеля это баг или фича?
Встречный вопрос, а что такое частичная функция?
Вот беру определение из хаскель вики
A partial function is a function that is not defined for all possible arguments of the specified type.
Так это и length значит частичная
Ведь она не определена на possible argument [1..]
по построению length вернёт значение, когда аргумент кончится
head - частичная. Потому что для некоторых значений аргумента не существует результата (вместо него exception)
жду определения

Google

Ilya
19.07.2018
05:57:14
"для некоторых значений аргумента не существует результата" верно и про length
Выход за пределы памяти, размера чисел, терпения программиста - не признаки частичности :)
а какие признаки?
короче кто что думает про то, как правильно определять "частичность" функции

Yuriy
19.07.2018
05:58:05

Ilya
19.07.2018
05:58:07
по-хорошему надо так, чтобы length под него не попадала

Aleksey
19.07.2018
05:58:16
length определена на всех значениях аргумента

Ilya
19.07.2018
05:58:28
это тоже значение аргумента

Aleksey
19.07.2018
05:58:45
У списка ровно два значения: [] и (x:xs)

Ilya
19.07.2018
05:59:00
так, вот и другое определение уже пошло

Aleksey
19.07.2018
05:59:11
Оба эти значения обрабатываются в length

Yuriy
19.07.2018
05:59:25

Ilya
19.07.2018
06:00:11

Aleksey
19.07.2018
06:00:28

Ilya
19.07.2018
06:00:37
обходит типа все варианты дерева АТД?

Yuriy
19.07.2018
06:00:42

Ilya
19.07.2018
06:00:55
ну я уже взял из хаскель вики
значит там неправильное

Google

Ilya
19.07.2018
06:01:14
я ж не говорю, что оно правильное
ну так дайте другое

Aleksey
19.07.2018
06:01:34
В length [1..] не length частичная
а [1..]

Yuriy
19.07.2018
06:01:57

Aleksey
19.07.2018
06:02:17
Нет
Это санк :)

Ilya
19.07.2018
06:02:23
@astynax ты уже 10 минут ходишь вокруг да около
способен дать определение или нет?

Aleksey
19.07.2018
06:02:36
что за наезд ваще?

Ilya
19.07.2018
06:02:37
чтобы можно было проверить, попадает length под него или нет

Aleksey
19.07.2018
06:02:48
Ты уже 10 минут выпендриваешься

Aleksey
19.07.2018
06:02:59
length по построению тотальная

Ilya
19.07.2018
06:03:02
понятно, подождём других участников :)

Yuriy
19.07.2018
06:04:27

Ilya
19.07.2018
06:07:42
пока небольшое затишье, приведу ещё одно определение частичной функции, в этот раз из матана

Aleksey
19.07.2018
06:08:08
В матане нет проблемы останова

Google

Ilya
19.07.2018
06:08:11
In mathematics, a partial function from X to Y (sometimes written as f: X ↛ Y or f: X ⇸ Y) is a function f: X ′ → Y, for some proper subset X ′ of X. It generalizes the concept of a function f: X → Y by not forcing f to map every element of X to an element of Y (only some proper subset X ′ of X). If X ′ = X, then f is called a total function and is equivalent to a function.
ещё раз хочу отметить, что length и по этому определению тоже частичная

Aleksey
19.07.2018
06:08:51
length обрабатывает все возможные значения аргумента
рекурсивно
но каждый шаг рекурсии - не частичный

Алексей Ayaye :)
19.07.2018
06:09:27
рекурсивная функция, которая тупо зацикливается - частично определена?

Ilya
19.07.2018
06:09:40
или как

Admin
ERROR: S client not available

Aleksey
19.07.2018
06:10:01
> ей нельзя подсунуть аргумент, который она не может заматчить
да
в отличие от head, например

Ilya
19.07.2018
06:11:13
head2 :: [a] -> a
head2 (x:xs) = x
head2 [] = head2 []
head2 частичная или нет?

Aleksey
19.07.2018
06:11:45
Тут рекурсия без убывания аргумента. Это просто ошибка программиста :)

Pineapple
19.07.2018
06:12:20
Так тотальноть не про ошибки программиста

Aleksey
19.07.2018
06:12:45
У length аргумент убывает. Если аргумент конечен, то результат всегда будет.

Pineapple
19.07.2018
06:12:58
Length тотальна для клнечных списков

Ilya
19.07.2018
06:12:59
или снова меняем определение, я не против

Google

Aleksey
19.07.2018
06:13:20
Я не давал определение ещё
Соответственно я его и не меняю
Меня устраивает опредедение из вики

Ilya
19.07.2018
06:14:35

Алексей Ayaye :)
19.07.2018
06:14:36

Aleksey
19.07.2018
06:14:39
Считать ли некорректно написанные рукурсивный функции частичными или нет - вопрос

Алексей Ayaye :)
19.07.2018
06:15:12

Pineapple
19.07.2018
06:15:28
Что значит некорректно написанные функции?

Alexander
19.07.2018
06:15:53
у нас там проблема останова решена?
чтобы length тотальной сделать?

Aleksey
19.07.2018
06:16:07
При этом в хаскеле из за ленивости вполне можно писать полезные "неправильно рекурсивные" функции :)
ones = 1 : ones

Алексей Ayaye :)
19.07.2018
06:17:04
f 1 = 1
f n | even n = f(n / 2)
| otherwise = f (3*n+1)
полностью определена?

Ilya
19.07.2018
06:17:15

Alexander
19.07.2018
06:17:39

Yuriy
19.07.2018
06:17:51
Окей, что мы даём на вход и ожидаем на выходе? можно считать по NF, length тотальная. по WHNF length частичная

Алексей Ayaye :)
19.07.2018
06:17:57

Aleksey
19.07.2018
06:17:58

Ilya
19.07.2018
06:18:29
"некорректно рекурсивная" корекурсивная что ль
потому ones корекурсивна

Aleksey
19.07.2018
06:18:53
"нет базового случая и аргумент не убывает"