Одной из идей было бы заменить это выражение:
s :: common (ss, y)
чем-то более сложным.
Если s
уже является членом common (ss, y)
, вы этого не сделаетехочу добавить это снова.Таким образом, вы можете заменить это выражение двумя случаями в зависимости от того, есть ли уже s
.
Для этого вы, вероятно, захотите использовать let
:
let rest = common (ss, y) in
. . .
(обратите внимание, что еслиэто был производственный код, в котором списки могут быть длинными, вы бы хотели избежать повторного вызова memberof
. Возможно, вы в конечном итоге будете использовать деревья. Т.е. множества. Тогда результатом будет совершенно прямое пересечение множеств.)