One simple approach is to use a similarity measure, such as Jaccard index. We can specify attributes that might be relevant to a language being a Lisp, e.g. does it have conses, does it use parenthesized syntax, what kind of macro facility it might have (if any), etc. Then we can come up with a list of languages, each represented by a set of attribute values, and compute the Jaccard indices between them. Example from input.
One simple approach is to use a similarity measure, such as Jaccard index. We can specify attributes that might be relevant to a language being a Lisp, e.g. does it have conses, does it use parenthesized syntax, what kind of macro facility it might have (if any), etc. Then we can come up with a list of languages, each represented by a set of attribute values, and compute the Jaccard indices between them. Example from input.