Nano Hash - криптовалюты, майнинг, программирование

Расширение структуры функтора и множественное приписывание в SML

Есть ли способ в Standard ML заставить функтор выводить структуру, которая имеет все функции переданной структуры, а также любые новые функции.

Аналогичным образом, возможно ли сделать множественное приписывание? В случае вышеизложенного это было бы сразу полезно, потому что вы могли бы приписать вывод функтора как сигнатуре исходной структуры, так и другой сигнатуре, которая определяет новую функциональность.

Я понимаю последствия таких действий и почему это может быть плохой идеей. В настоящее время я просто храню копию переданной структуры в выводе функтора, но это означает, что у вас есть длинная цепочка «Foo.Bar.func» для доступа к базовой функциональности.

Спасибо

13.08.2011

Ответы:


1

Скажем, я хотел сделать подпись для «TestUp». Есть ли способ сделать это без дублирования содержимого «ТЕСТ» в новую подпись?

Если я правильно понимаю ваш вопрос, то вы ищете ключевое слово include, которое будет включать определение предыдущей подписи в новую и, таким образом, расширять подпись предыдущими определениями.

signature TEST_EXT =
sig
  include TEST

  val beep1 : meep -> unit
end

functor TestUp_EXT(T : TEST) : TEST_EXT =
struct
  open T

  fun localFun s = beep (10, s)
  val beep1 = localFun

end


structure Test2_EXT = TestUp_EXT (Test);

Test2_EXT.beep (5, "EXT: Hi");
Test2_EXT.beep1 "Hi";

print (Int.toString (Test2.rand ()) ^ "\n");


(* This will fail as the signature doesn't define this function,
however as seen the function can easily be used within the functor as
expected *)
(* Test2_EXT.localFun "Hi"; *)
07.09.2011

2

Вы можете использовать open, чтобы перенести содержимое структуры в текущую область. Если он используется внутри другой структуры (или функтора), он будет делать то, что, как мне кажется, вы хотите.

Пример можно увидеть здесь:

signature TEST =
sig
    type meep;
    val beep : int * meep -> unit;
end;

structure Test : TEST =
struct
    type meep = string

    fun beep (0, _) = ()
      | beep (n, s) = (print (s^"\n"); beep (n-1, s));
end;

functor TestUp (T : TEST) =
struct
    open T

    fun rand () = 4
end;

structure Test2 = TestUp (Test);

Test.beep (5, "Hello");

Test2.beep (5, "Hi");

print (
    Int.toString (Test2.rand ()) ^ "\n"
);
14.08.2011
  • Большое спасибо! Это определенно отвечает на мой вопрос о функторах. Знаете ли вы что-нибудь о множественном приписывании? Скажем, я хотел сделать подпись для TestUp. Есть ли способ сделать это без дублирования содержимого TEST в новую подпись? 15.08.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..