Приведение в исполнение gflist_vt_mergesort$cmp

В gflist_vt.sats, подпись gflist_vt_mergesort$cmp подразумевает, что порядок, используемый для сортировки, должен быть таким же, как и для марки. Я понимаю, что если дана такая функция сравнения, то она гарантирована.

В этом примереgflist_vt_mergesort$cmp похоже, реализовано с использованием небезопасного приведения.

  • Безопасно ли это делать? (т.е. это не вызывает каких-либо проблем? например, что если список сортируется несколько раз с разным порядком?)
  • Есть ли другой (более безопасный) способ?

1 ответ

Решение

Небезопасное литье по своей сути небезопасно.

Небезопасное литье может быть удалено. Для этого вам нужно реализовать абстрактный тип stamped_vt0ype (который дан псевдоним stamped_vt). Например, чтобы отсортировать список целых чисел в порядке убывания, вы можете сделать что-то следующим образом:

local

assume stamped_vt0ype(_, i) = int(~i)

in (* in-of-local *)

implement
{a}
gflist_vt_mergesort$cmp(x, y) = g1int_sgn(y - x)

end // end of [local]

Тем не менее, выполнение чего-то подобного не дает большого смысла в практическом программировании.

Другие вопросы по тегам