Сообщение Re[16]: Ввод-вывод и чистые функции от 31.01.2017 7:55
Изменено 31.01.2017 7:59 D. Mon
Re[16]: Ввод-вывод и чистые функции
Здравствуйте, novitk, Вы писали:
N>От меня ускользает смысл. ТС вроде за аннотацию, ты вроде тоже. 99% в D это обычные грязные функции без аннотации и написать на нем чистую функцию реально нельзя, так как комбинаторы тянут грязь. То есть по факту pure в нем не додумана и не используется.
Это ваши выводы не додуманы. Никакую грязь комбинаторы не тянут, их отлично себе можно использовать в чистом коде.
N>>>И два map-a это не решение проблемы, потому что потом нужно два fold-а и вообще всего в std.algorithm или как оно там называется,
Не нужно. Чистота там выводится автоматически.
N>Как мне g переделать в грязную? Я надеюсь какой-то лифтинг все же есть и мне не надо переписывать g еще раз.
N>От меня ускользает смысл. ТС вроде за аннотацию, ты вроде тоже. 99% в D это обычные грязные функции без аннотации и написать на нем чистую функцию реально нельзя, так как комбинаторы тянут грязь. То есть по факту pure в нем не додумана и не используется.
Это ваши выводы не додуманы. Никакую грязь комбинаторы не тянут, их отлично себе можно использовать в чистом коде.
N>>>И два map-a это не решение проблемы, потому что потом нужно два fold-а и вообще всего в std.algorithm или как оно там называется,
Не нужно. Чистота там выводится автоматически.
N>Как мне g переделать в грязную? Я надеюсь какой-то лифтинг все же есть и мне не надо переписывать g еще раз.
int f(int i) pure {
return i*i;
}
int h(int i) {
writeln("Bad");
return i*i;
}
int g(alias func)() {
return func(10);
}
int makeSureWeReStillPure() pure {
return g!f + 1;
}
void main(string[ ] args)
{
writeln(g!f);
writeln(g!h);
writeln(makeSureWeReStillPure());
}
100
Bad
100
101
Re[16]: Ввод-вывод и чистые функции
Здравствуйте, novitk, Вы писали:
N>От меня ускользает смысл. ТС вроде за аннотацию, ты вроде тоже. 99% в D это обычные грязные функции без аннотации и написать на нем чистую функцию реально нельзя, так как комбинаторы тянут грязь. То есть по факту pure в нем не додумана и не используется.
Это ваши выводы не додуманы. Никакую грязь комбинаторы не тянут, их отлично себе можно использовать в чистом коде.
N>>>И два map-a это не решение проблемы, потому что потом нужно два fold-а и вообще всего в std.algorithm или как оно там называется,
Не нужно. Чистота там выводится автоматически.
N>Как мне g переделать в грязную? Я надеюсь какой-то лифтинг все же есть и мне не надо переписывать g еще раз.
N>От меня ускользает смысл. ТС вроде за аннотацию, ты вроде тоже. 99% в D это обычные грязные функции без аннотации и написать на нем чистую функцию реально нельзя, так как комбинаторы тянут грязь. То есть по факту pure в нем не додумана и не используется.
Это ваши выводы не додуманы. Никакую грязь комбинаторы не тянут, их отлично себе можно использовать в чистом коде.
N>>>И два map-a это не решение проблемы, потому что потом нужно два fold-а и вообще всего в std.algorithm или как оно там называется,
Не нужно. Чистота там выводится автоматически.
N>Как мне g переделать в грязную? Я надеюсь какой-то лифтинг все же есть и мне не надо переписывать g еще раз.
int f(int i) pure {
return i*i;
}
int h(int i) {
writeln("Bad");
return i*i;
}
int g(alias func)() { // автоматически чистая или грязная в зависимости от func
return func(10);
}
int makeSureWeReStillPure() pure {
return g!f + 1;
}
void main(string[ ] args)
{
writeln(g!f);
writeln(g!h);
writeln(makeSureWeReStillPure());
}
100
Bad
100
101