Category:
Computer Science

Your code must be written in R5RS!

Write a function two-subsets in Scheme that takes a list L of positive integers (duplicates are possible, zero is not considered a positive integer) and some auxiliary parameters of your choice. The function two-subsets returns #t if the list L contains two subsets with equal sums of elements and with equal numbers of elements. Otherwise (if two subsets satisfying the condition above do not exist), the function returns #f. Assume that the list L contains at least two integers.

It is up to you to choose the auxiliary parameters that two-subsets 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 if you decide to use two additional auxiliary parameters, then two-subsets must be called as follows:

(two-subsets ‘(1 2 3) 0 0)

If there are three auxiliary parameters, then the function must be called: (two-subsets ‘(1 2 3) 0 0 0) and so on.

Examples

(two-subsets ‘(5 3 21 2 4) 0 0) returns #t. The two subsets are {2, 5} and {3, 4}. (two-subsets ‘(2 13 7 5 16 11) 0 0) returns #t. The two subsets are {7, 11} and

{5, 13}.

(two-subsets ‘(1 2 3 6 9) 0 0) returns #f.

You can use ONLY the following constructs:

– null?

cond

car

cdr

else

–

+

=

– not

– and

– #t

– #f

– two-subsets

– the names of your parameters, such as list, sum, etc. – numeric constants, such as 0, 1, 2, etc.

– parentheses