Variadic Functions in Scheme

Variadic functions can be called with any number of trailing arguments. For example, fmt.Println is a common variadic function.

Here’s a function that will take an arbitrary number of ints as arguments.

def sum(*nums):
    print(nums, " ")
    total = 0
    for num in nums:
        total += num
    print(total)

def main():
    # Variadic functions can be called in the usual way with individual arguments.
    sum(1, 2)
    sum(1, 2, 3)

    # If you already have multiple args in a list,
    # apply them to a variadic function using sum(*list) like this.
    nums = [1, 2, 3, 4]
    sum(*nums)

if __name__ == '__main__':
    main()
$ python variadic-functions.py
(1, 2)  
3
(1, 2, 3)  
6
(1, 2, 3, 4)  
10

Another key aspect of functions is their ability to form closures, which we’ll look at next.