# Given a list of positive integers L, and two positive integers n and s, # the following Maple function returns a subset of the first n # members of L which adds up to s, or FAIL if no such subset exists. subsetsum := proc(n,s,L) option remember; local sub; if n=1 then if s=L[1] then return [s] else return FAIL end if; end if; sub := subsetsum(n-1,s,L); if (sub <> FAIL) then return sub end if; if L[n] > s then return FAIL end if; if L[n] = s then return [s] end if; sub:=subsetsum(n-1,s-L[n],L); if (sub=FAIL) then return FAIL else return [op(sub),L[n]] end if; end;