Г-н Фаршеклоакин (spamsink) wrote,
Г-н Фаршеклоакин
spamsink

Хочется странного



Внезапно захотелось странного: возможности рекурсивно вызвать вызвавшую функцию с заменой некоторых ее аргументов согласно определенному правилу. Например, у меня есть
void foo(T1 arg1, T2 arg2, T3 arg3, T4 arg4) {
    ...
    if (сложное условие) {
        T3 newArg3 = сложное вычисление;
        return foo(arg1, arg2, newArg3, arg4);
    }
    ...
}
и
T5 bar(T1A arg1, T2A arg2, T3 arg3) {
    ...
    if (то же самое сложное условие) {
        T3 newArg3 = то же самое сложное вычисление;
        return bar(arg1, arg2, newArg3);
    }
    ...
}

Как прикажете выфакторизовывать сложное условие и сложное вычисление? В идеале (псевдокод) было бы что-то вроде
Maybe T baz(данные для вычисления условия и newArg3) {
// "Maybe void" must be == bool.
    if (сложное условие) {
        return Just recurseParent(map (3 => сложное вычисление));
    }
    return None;
}

void foo(T1 arg1, T2 arg2, T3 arg3, T4 arg4) {
    ...
    if (baz(...)) {
        return;
    ...
}

T5 bar(T1A arg1, T2A arg2, T3 arg3) {
    ...
    Maybe T5 val = baz(...);
    if (val != None)
        return val;
    ...
}


Какой-нибудь язык сейчас так может?
Tags: work
Subscribe

  • Это что за орфографические новости?

    В одном ютубовском ролике, который автор стесняется озвучивать голосом, в субтитрах замечены слова вида puttx, poppx, havx, gettx, eatx, gox. Судя…

  • Юникод для новояза

    В списке кодов, предложенных к включению в юникод версии 14: 1AC9..1ACA 2 COMBINING DOUBLE PLUS SIGN ABOVE COMBINING DOUBLE PLUS SIGN BELOW Также…

  • Ни на что не намекаю, просто песенку пою

    Подсадил меня Ютуб в последние дни на песенный конкурс для детей, оставшихся без попечения родителей "Ты супер!" (по-моему, весьма полезное,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 16 comments

  • Это что за орфографические новости?

    В одном ютубовском ролике, который автор стесняется озвучивать голосом, в субтитрах замечены слова вида puttx, poppx, havx, gettx, eatx, gox. Судя…

  • Юникод для новояза

    В списке кодов, предложенных к включению в юникод версии 14: 1AC9..1ACA 2 COMBINING DOUBLE PLUS SIGN ABOVE COMBINING DOUBLE PLUS SIGN BELOW Также…

  • Ни на что не намекаю, просто песенку пою

    Подсадил меня Ютуб в последние дни на песенный конкурс для детей, оставшихся без попечения родителей "Ты супер!" (по-моему, весьма полезное,…