What is shadowing, and how can it occur? Give an example.
Given the definition
f([]) = [] f(h::t) = (h*h)::f(t) when h > 10 f(h::t) = f(t) when h <= 10show an inside-out evaluation of expression f([4,12,15,6,11]). Assume that arithmetic is done as soon as possible.
Write an equational definition of a function called smallest so that smallest(n,x) is the smallest member of list n::x. For example, smallest(3, [6,4,7]) = 3 and smallest(8, [2,5]) = 2. You may presume that you have a function called min that takes the minimum of two numbers. For example, min(7,4) = 4.
Write an equational definition of a function stutter where stutter([a,b,c,d]) = [a,a,b,b,c,c,d,d]. In general, stutter includes two copies of each item.
In a purely functional language, is it ever possible to compute the same expression twice in the same context and get different values? For example, if E is an expression, could
Let x = E + E.ever yield a different result from
Let y = E. Let x = y + y.Why or why not?
By choosing among the operations lfold, rfold, map and select, write a definition for each of the following that does not use recursion or loops.
Write a function called doubleAll that takes a list x of numbers as its parameter and produces a list of the doubles numbers in list x as its result. For example, doubleAll([5,2,19,3]) = [10,4,38,6].
Write a function called firstPos that returns the first positive number from a list of numbers. For example, firstPos([-4, -2, 0, 6, 12, -9]) = 6. Presume that the list has at least one positive number in it.
Consider the following definition written in Astarte.
Define f(?n) = (:n*n :: f(n+1):).What value does expression f(2) compute? Give the full value, as it would be if it were examined. (It suffices to give a clear description of the full value.)
Using Astarte syntax write a definition of a function called filter so that (filter p L) returns a list of all members x of list L such that p(x) is true. For example, if p is the predicate so that p(x) is true just when x < 100, then (filter p [3,81,200,34,999,3000,20]) = [3,81,34,20].
Indicate how the definition of filter might be changed to prevent filter from computing the entire list before returning part of the list, so that a function that only wants to look at part of the result of filter does not need to evaluate the entire result list.