I\'m pretty new to scheme overall and I\'m having some issues with figuring out an assignment for school. So please no full answers, just looking for a little insight or a nudg
There are some issues in your code.
This creates a list of a list:
(list '(7 5)) ; => ((7 5))
A cdr
of that is always an empty list.
(cdr (list '(7 5))) ; => ()
A single list is created in this way:
(define l (list 7 5))
or this way:
(define l '(7 5))
You use parenthesis in Scheme for application. This:
(#t)
means "execute the function #t
". But #t
is not a function, it is a Boolean value. And Boolean values can not be executed.
Your can return a Boolean value directly
#t
or you can return a function returning the value
(lambda () #t)
but you can not execute true.
Same problem in or
. The following code:
(or ((two-subsets (cdr l) (+ s1 1) s2 (+ l1 1) l2)
(two-subsets (cdr l) s1 (+s2 1) l1 (+ l2 1))))
means: two-subsets
must return a function. The function returned by the first two-subsets
call gets executed with the function returned by the second two-subsets
call. And the single result value gets passed to or
. This is probably not what you want.
If you want to or
the two return values of the two calls to two-subsets
, you have to remove two parenthesis.
(or (two-subsets (cdr l) (+ s1 1) s2 (+ l1 1) l2)
(two-subsets (cdr l) s1 (+s2 1) l1 (+ l2 1)))
length
) and sum (you can use apply
to pass a list to +
). Spoilerlet
.