Task

Create a function which takes in a variable number of arguments and prints each one on its own line.

Also show, if possible in your language, how to call the function on a list of arguments constructed at runtime.



Functions of this type are also known as Variadic Functions.



Related task

   Call a function


use framework "Foundation"
 
-- positionalArgs :: [a] -> String
on positionalArgs(xs)
 
    -- follow each argument with a line feed
    map(my putStrLn, xs) as string
end positionalArgs
 
-- namedArgs :: Record -> String
on namedArgs(rec)
    script showKVpair
        on |λ|(k)
            my putStrLn(k & " -> " & keyValue(rec, k))
        end |λ|
    end script
 
    -- follow each argument name and value with line feed    
    map(showKVpair, allKeys(rec)) as string
end namedArgs
 
-- TEST
on run
    intercalate(linefeed, ¬
        {positionalArgs(["alpha", "beta", "gamma", "delta"]), ¬
            namedArgs({epsilon:27, zeta:48, eta:81, theta:8, iota:1})})
 
    --> "alpha
    --   beta
    --   gamma
    --   delta
    -- 
    --   epsilon -> 27
    --   eta -> 81
    --   iota -> 1
    --   zeta -> 48
    --   theta -> 8
    --  "
end run
 
 
-- GENERIC FUNCTIONS
 
-- putStrLn :: a -> String
on putStrLn(a)
    (a as string) & linefeed
end putStrLn
 
-- map :: (a -> b) -> [a] -> [b]
on map(f, xs)
    tell mReturn(f)
        set lng to length of xs
        set lst to {}
        repeat with i from 1 to lng
            set end of lst to |λ|(item i of xs, i, xs)
        end repeat
        return lst
    end tell
end map
 
-- intercalate :: Text -> [Text] -> Text
on intercalate(strText, lstText)
    set {dlm, my text item delimiters} to {my text item delimiters, strText}
    set strJoined to lstText as text
    set my text item delimiters to dlm
    return strJoined
end intercalate
 
-- allKeys :: Record -> [String]
on allKeys(rec)
    (current application's NSDictionary's dictionaryWithDictionary:rec)'s allKeys() as list
end allKeys
 
-- keyValue :: Record -> String -> Maybe String
on keyValue(rec, strKey)
    set ca to current application
    set v to (ca's NSDictionary's dictionaryWithDictionary:rec)'s objectForKey:strKey
    if v is not missing value then
        item 1 of ((ca's NSArray's arrayWithObject:v) as list)
    else
        missing value
    end if
end keyValue
 
-- Lift 2nd class handler function into 1st class script wrapper 
-- mReturn :: Handler -> Script
on mReturn(f)
    if class of f is script then
        f
    else
        script
            property |λ| : f
        end script
    end if
end mReturn