Download
71 lines 1.3 KiBTextModified 2022-07-28 raw
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
macro max(_xs, x, expr)
    xs := _xs
    if x := xs[1]
        best := x
        best_score := expr
        for x in xs[2..]
            score := expr
            if score > best_score
                best = x
                best_score = score
        best

macro min(_xs, x, expr)
    xs := _xs
    if x := xs[1]
        best := x
        best_score := expr
        for x in xs[2..]
            score := expr
            if score < best_score
                best = x
                best_score = score
        best

macro max(_xs)
    xs := _xs
    if best := xs[1]
        for x in xs[2..]
            if x > best
                best = x
        best

macro min(_xs)
    xs := _xs
    if best := xs[1]
        for x in xs[2..]
            if x < best
                best = x
        best

macro any(_xs, x, expr)
    xs := _xs
    ret := no
    for x in xs
        if expr
            ret = yes
            stop
    ret

macro all(_xs, x, expr)
    xs := _xs
    ret := yes
    for x in xs
        if not expr
            ret = no
            stop
    ret

macro sum(_xs)
    xs := _xs
    if total := xs[1]
        for x in xs[2..]
            total += x
        total

macro product(_xs)
    xs := _xs
    if total := xs[1]
        for x in xs[2..]
            total *= x
        total