Názor k článku Podpora funkcionálního programovaní v jazyku Lua s využitím knihovny Moses (pokračování) od wamba - Jako typický příklad reduceRight mě napadá umocňování reduce({3, 2,...

  • Článek je starý, nové názory již nelze přidávat.
  • 7. 8. 2020 0:27

    wamba

    Jako typický příklad reduceRight mě napadá umocňování

    reduce({3, 2, 2, 2}, function (x, y) return x ^ y end) -- 6561.0
    reduceRight({3, 2, 2, 2}, function (x, y) return y ^ x end)  -- 43046721.0

    nebo pak vytvoření vnořené tabulky

    t=reduceRight({ "a" , "b" , "c" , "d", 2 }, function (x, y) return {[y]=x} end)
    t.a.b.c.d -- 2

    v obou dvou případech to alespoň v mých očích trochu zabijí pořadí argumentů v reduceRight, já bych to čekal naopak, ale asi je to věc zvyku.

    Já jsem něco podobného nedávno použil v Raku, když jsem potřeboval vytvořit něco jako linkedlist.. Tam to funguje tak, že operátory mají asociativnost a reduce pak pracuje na podle toho. Asociativnost operátoru pro vytvoření dvojice => (něco jako v lispu .) je zprava. Tak jsem napsal něco jako

    (1...10).reduce: &[=>] #1 => 2 => 3 => 4 => 5 => 6 => 7 => 8 => 9 => 10
    #resp. zkráceně
    [=>] 1...10

    podobně bych mohl ten příklad s umocňováním zapsat v Raku

    [**] 3,2,2,2  #43046721