Что касается различий, Джас рассказал о большинстве из них в своем комментарии:
distinct
ленивый
distinct
без аргументов - преобразователь
distinct
поддерживает порядок
Что касается того, какой из них предпочтителен, distinct
по вышеуказанным причинам, а также потому, что объясняет, что вам нужно. Я забыл, в какой книге на Лиспе об этом говорилось (возможно, это была Let Over Lambda ), но когда предоставляется выбор между двумя похожими функциями, предпочтите ту, которая более конкретна. distinct
объясняет, что вам нужны разные элементы. (into #{} xs)
может выдавать разные значения, но также позволяет неправильно понять ваше намерение. Кто-то может легко подумать, что вам нужен набор по какой-то причине. distinct
сужает почему .