Is it possible to define discrete sets of languages, like object oriented, procedural or functional? Or are some languages partial members of these sets? And if so, is their degree of membership based on the importance of different aspects of the sets' definitions to each observer? I've seen much debate about whether a given language was really an "object oriented" language. I've seen the creation of alternate categories like "object based" for languages that made some aspects of OO programming easier but ignored others. I've seen object oriented programs written in languages commonly described as "procedural". And all of these styles of programming can be implemented with general purpose processors. This leads me to believe that a language can make some styles of programming more or less difficult, and that languages fall into fuzzy sets described by their ease of use for a particular style. ''I think you'll get different answers from different people. We already know that there are well known purists who say that e.g. C++ is not OO, whereas others say that it is.'' ''A less partisan examination shows that C++ and Java have both OO features and pure procedural features, e.g. string literals are values, not objects, but they (at least arguably) have objects, too.'' ''Different people give different answers to these things because they use different criteria, and different definitions of terminology. When one wants very sharp results, one must settle those foundational issues first, or else ensuing discussion can't reach consensus.'' ''Your claim that there are fuzzy sets involved is itself a foundational claim, and is one that some will agree with and others will disagree with, because it in term rests on even more fundamental foundations that you are not defining.''