filter p (concat (map (\ x -> map (\ y -> (x,y)) [1..x]) [1..6])) where p (x,y) = x+y < 10
According to a note by Rishiyur Nikhil <firstname.lastname@example.org>, (August 1992), the term itself seems to have been coined by Phil Wadler circa 1983-5, although the programming construct itself goes back much further (most likely Jack Schwartz and the SETL language).
The term "list comprehension" appears in the references below.
David Turner subsequently adopted this notation in his languages SASL, KRC and Miranda, where he has called them "ZF expressions", set abstractions and list abstractions (in his 1985 FPCA paper [Miranda: A Non-Strict Functional Language with Polymorphic Types]).
["The OL Manual" Philip Wadler, Quentin Miller and Martin Raskovsky, probably 1983-1985].
["How to Replace Failure by a List of Successes" FPCA September 1985, Nancy, France, pp. 113-146].