Список несвязанных значений в Ocaml? - PullRequest
0 голосов
/ 11 июля 2020

Я только что создал небольшую тестовую программу, чтобы увидеть мою более серьезную проблему, но продолжаю получать сообщение об ошибке.

let test a =
   List.length [a;a;a]

Я хочу собрать ее с помощью ocamlbuild.

ocamlbuild call.byte -no-hygiene

Я попробовал добавить -pkgs 'core', но это тоже не сработало.

Это ошибка.

Error: Unbound value List.length

Есть предложения?

1 Ответ

0 голосов
/ 11 июля 2020

Это не совсем ответ, извините. Но область комментариев слишком ограничена для предоставления предлагаемых командных строк.

Модуль List должен быть установлен как часть любой установки OCaml. Это часть указанного языка. Если ваш компилятор действительно не может найти модуль List, значит, что-то не так.

Одна из возможностей состоит в том, что ваша установка испорчена и в ней нет модуля List. Первое, что нужно попробовать в этом случае, - это переустановить OCaml в вашей системе, если это возможно.

Вот как я могу найти модуль Stdlib (фактический файл) для моей установки.

$ ocamlc -where
/Users/self/.opam/4.10.0/lib/ocaml
$ ls -l $(ocamlc -where)/stdlib.cm*a
-rw-rw-r--  1 self  staff  2812632 Mar  2 09:07 \
     Users/jeffsco/.opam/4.10.0/lib/ocaml/stdlib.cma
-rw-rw-r--  1 self  staff    22621 Mar  2 09:07 \
    /Users/jeffsco/.opam/4.10.0/lib/ocaml/stdlib.cmxa

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

Если это то, что происходит, и если вы хотите использовать эту другую библиотеку, то вам следует прочитать документацию по библиотеке, чтобы узнать, как получить доступ к стандартным функциям библиотеки. Почти всегда есть способ сделать это.

...