OCaml - объединение последовательностей Parmap - PullRequest
0 голосов
/ 03 февраля 2020

Есть ли способ объединить последовательности Parmap, подобные встроенным спискам в OCaml?

В частности, я хочу сделать что-то, что будет работать так:

let yolo = [1;2;3]
let swag = [4;5;6]

let magic1 = Parmap.L yolo
let magic2 = Parmap.L swag

//below does not work
let result = magic1@magic2

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Вы можете написать свою собственную реализацию конкатенации (даже через инфиксный оператор с некоторым причудливым именем, если необходимо). Просто «деструктурируйте» упакованные значения, объедините их и поместите результат обратно в соответствующий «контейнер»:

let (|@|) l1 l2 =
  match l1, l2 with
  | Parmap.L l1, Parmap.L l2 -> Parmap.L (l1 @ l2)
  | Parmap.A l1, Parmap.A l2 -> Parmap.A (Array.append l1 l2)
  | _, _ -> failwith "cannot concat oranges to apples"
;;

magic1 |@| magic2;;
- : int Parmap.sequence = Parmap.L [1; 2; 3; 4; 5; 6]
0 голосов
/ 04 февраля 2020

Полагаю, вы имеете в виду этот parmap .

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

let yolo = [1;2;3]
let swag = [4;5;6]

let parseq = Parmap.L (yolo @ swag)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...