Г-н Фаршеклоакин (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

  • Хочу всё знать, или физики, ау!

    Представьте себе плавательный бассейн, для конкретности стандартный олимпийский (50x25x2 м) в котором много часов никто не плавал. Вода в нём…

  • Старость не радость

    Утром я где-то в комментах к одному из постов в одной из двух моих френдлент увидел ссылку на свежий рассказ Лео Каганова "Диалоги рептильного…

  • Терминологические новости и хорошо забытое старое

    В рабочем обучающем ролике, пропагандирующем терминологию, споспешествующую diversity and inclusion, признано считать вредными следующие термины в…

  • 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

  • Хочу всё знать, или физики, ау!

    Представьте себе плавательный бассейн, для конкретности стандартный олимпийский (50x25x2 м) в котором много часов никто не плавал. Вода в нём…

  • Старость не радость

    Утром я где-то в комментах к одному из постов в одной из двух моих френдлент увидел ссылку на свежий рассказ Лео Каганова "Диалоги рептильного…

  • Терминологические новости и хорошо забытое старое

    В рабочем обучающем ролике, пропагандирующем терминологию, споспешествующую diversity and inclusion, признано считать вредными следующие термины в…