Как объявить функциональные параметры в OCaml / ReasonML? - PullRequest
0 голосов
/ 24 марта 2020

Есть две функции; funA и funB соответственно. a.i, a.o, ah, w, c - массивы в функции funA . Функция funA должна быть передана в качестве функционального параметра в функцию funB , а функции funB должны иметь доступ к массивам. К сожалению, программа проверки синтаксиса обнаружила ошибку «Ошибка: поле несвязанной записи а». Прокомментируйте, пожалуйста, как объявить функциональные параметры в OCaml / ReasonML?

Полный список

module Test = {
    let vector = Array.init;
    let matrix = (m, n, f) => vector(m, i => vector(n, f(i)));
    let length = Array.length;
    let rand = (x0, x1) => x0 +. Random.float(x1 -. x0);
    let funA = (ni, nh, no) => {
      let init = (fi, fo) => {
        let i = matrix(ni + 1, nh, fi);
        let o = matrix(nh, no, fo);
        ();
      };

      let a = {
        let i = vector(ni + 1, _ => 1.0);
        let o = vector(no, _ => 1.0);
        ();
      };

      let ah = vector(nh, _ => 1.0);
      let w = init((_, _) => rand(-0.2, 0.4), (_, _) => rand(-2.0, 4.0));
      let c = init((_, _) => 0.0, (_, _) => 0.0);
      ();
    };

    let funB = (net, inputs) => {
      let (ni, nh, no) = (
        length(net.a.i),
        length(net.ah),
        length(net.a.o),
      );
      ();
    };
  };

1 Ответ

0 голосов
/ 24 марта 2020

Чтобы разрешить функциональный параметр funA , который недоступен в функции funB , примените следующий тип в начале модуля.

module Test = {

    type io('a) = {
      i: 'a,
      o: 'a,
    };

    type vec = array(float);

    type mat = array(vec);

    type funA = {
      a: io(vec),
      ah: vec,
      w: io(mat),
      c: io(mat),
    };

.......
...