почему set-union и friends не принимают изменяемые множества в качестве аргументов? - PullRequest
1 голос
/ 04 апреля 2019

Я попытался (set-union (mutable-set) (mutable-set)), и он вернул ошибку.Но я думал, что в документации сказано, что входные наборы должны быть generic-set с?

1 Ответ

1 голос
/ 04 апреля 2019

Контракт здесь не является точным, но отмечается в начале документации , что:

  • Все хеш-наборы реализуют set-> stream, set-пусто ?, set-member ?, set-count, subset ?, Proper-subset ?, set-map, set-for-each, set-copy, set-copy-clear, set-> list и set-first.
  • Неизменяемые хэш-наборы дополнительно реализуют набор-добавление, набор-удаление, удаление-набор, объединение наборов, набор-пересечение, набор-вычитание и набор-симметричную разность.
  • Изменяемые хэш-множества, кроме того, реализуют set-add !, set-remove !, set-clear !, set-union, set-intersect !, set-subtract !, и set-симметричной-разности !.

Однако я думаю, что документация может быть улучшена.

Если вы хотите увидеть реализацию наборов, здесь где изменяемые наборы запрещают set-union.

Обратите внимание, однако, что хорошо иметь (mutable-set) в не первой позиции (и это явно задокументировано в документации).Например, это работает:

> (set-union (set) (mutable-set 1 2 3) (mutable-set 4 5 6))
(set 1 5 3 2 6 4)
...