S.I/Lisp/

FORMAT




=FORMAT("The time is now {1} o'clock.", 5)
-> "The time is now 5 o'clock."

=FORMAT(
    "{1}% of {2} is {3}.",
    10,
    20,
    PERCENTOF,
        10,
        20)
-> "10% of 20 is 2."
        



DEFINE(
    FORMAT,
    LAMBDA(
        template_text,
        first_value,
        [second_value],
        [third_value],
        [fourth_value],
        [fifth_value],
        [sixth_value],
        [seventh_value],
        [eigth_value],
        [ninth_value],
        [tenth_value],
        LET(
            _after1,
                SUBSTITUTE(template_text, "{1}", first_value),
            _after2,
                IF(
                    PROVIDED?(second_value),
                    SUBSTITUTE(_after1, "{2}", second_value),
                    _after1),
            _after3,
                IF(
                    PROVIDED?(third_value),
                    SUBSTITUTE(_after2, "{3}", third_value),
                    _after2),
            _after4,
                IF(
                    PROVIDED?(fourth_value),
                    SUBSTITUTE(_after3, "{4}", fourth_value),
                    _after3),
            _after5,
                IF(
                    PROVIDED?(fifth_value),
                    SUBSTITUTE(_after4, "{5}", fifth_value),
                    _after4),
            _after6,
                IF(
                    PROVIDED?(sixth_value),
                    SUBSTITUTE(_after5, "{6}", sixth_value),
                    _after5),
            _after7,
                IF(
                    PROVIDED?(seventh_value),
                    SUBSTITUTE(_after6, "{7}", seventh_value),
                    _after6),
            _after8,
                IF(
                    PROVIDED?(eigth_value),
                    SUBSTITUTE(_after7, "{8}", eigth_value),
                    _after7),
            _after9,
                IF(
                    PROVIDED?(ninth_value),
                    SUBSTITUTE(_after8, "{9}", ninth_value),
                    _after8),
            IF(
                PROVIDED?(tenth_value),
                SUBSTITUTE(_after9, "{10}", tenth_value),
                _after9))))
        



Help us optimize this function