Вы можете посмотреть, является ли n
значением Variable
, и если да, не включать его, например, с помощью:
findTerms :: Term -> [Term]
findTerms (Variable x) = []
findTerms (Lambda x n) = findTerms n
findTerms (Apply <b>(Variable _)</b> m) = findTerms m
findTerms (Apply n m) = n : findTerms m
Здесь, если первый параметр Apply
является Variable _
, поэтому мы не будем его рассматривать, в противном случае мы выдадим n
в списке.
Возможно, вам также следует recurse на n
и m
, поскольку это может также содержат термины. Для лямбды вы можете вернуть саму лямбду:
findTerms :: Term -> [Term]
findTerms (Variable x) = []
findTerms l@(Lambda _ _) = [l]
findTerms (Apply n m) = findTerms n ++ findTerms m