Write a function
min-split in Scheme (R5RS) that takes a list of two or more positive integers
(duplicates are possible) and other auxiliary parameters of your choice. The
list L is flat, i.e., it does not contain sublists. The function min-split
returns the size of the minimum split of a list L.
It is up to you to choose the auxiliary
parameters that min-split takes. All auxiliary parameters must be numeric (not
lists) and should have initial values set to zero. For example, if L is ‘(1 2
3) and you decide to use two additional auxiliary parameters, min-split should
be called as follows:
(min-split ‘(1 2 3) 0 0)
If there are three auxiliary parameters, then it
must be called:
(min-split ‘(1 2 3) 0 0 0)
Terminology:
- A split is a division of L into two subsets:
every element of L must belong to exactly one of the subsets and no elements
can be left out of the split. Same as a partition from the last assignment.
- The size of a split is defined as |S1 – S2|,
where S1is the sum of all integers in one of the subsets of the split and S2 is
the sum of all integers in the other subset. In other words, to calculate the
size of the split one needs to subtract the smaller sum from the larger sum.
-The minimum split is the one with the smallest
size among all possible splits. The program min-split needs to print the size
of the minimum split. It is possible that there are several minimum splits. In
this case, all of them must have the same size.
Examples:
‘(1 1) returns 0. The minimum split is {1} and
{1}. The size of the split is 1 -1 = 0.
‘(1 2 3) returns 0. The minimum split is {1, 2}
and {3}. The size of the split is 3 – 3 = 0. There are other splits such as {1,
3} and {2}; {1} and {2, 3}; and {1, 2, 3} and the empty set. There split sizes
are greater than 0, however, so are not minimum splits.
‘(86107)returns1.
Theminimumsplitis{6,10}and{7,8}. Itssizeis16–15=1. ‘(12101189)returns4.
Theminimumsplitis{11,12}and{8,9,10}. Itssizeis27–23=4.
The whole solution must be packed in one
recursive function min-split which must look as follows
(define min-split (lambda (<list L followed
by your auxiliary parameters of your choice initially set to zero>)
(cond ...
)))
In otherwords, you have to choose your auxiliary
parameters and define ONE COND statement. Inside COND, you can only use ONLY
the following constructs:
- null?
- car
- cdr - else -+ -- ->
- min-split
- if
- user defined names (for the names of your
paramters)
- integer literals
- parentheses
You cannot use a construct if it is not listed
above. The use of built-in functions is not allowed. You cannot define or call
any other function with the exception of min-split. In other words, your code
must use only one function, min-split which must be defined using the
constructs from the list above.
If your program uses a construct not on the
list, then it is not a solution to this homework.
Answer:
Attached file
Get Free Quote!
343 Experts Online