Вы можете создать вспомогательную функцию, которая закрывается за origarg
.
Прежде всего, вы не определили someotherfunc
, вот та, которая удовлетворяет сигнатуре типа:
(* just to match the expected type *)
let someotherfunc x y = x @ y
Затем вы встраиваете определение для helperfunc
в другую функцию:
let make_helperfunc origarg =
let rec helperfunc newarg = match newarg with
| [] -> []
| h::t -> h::helperfunc (someotherfunc t origarg)
in helperfunc
Каждый раз, когда вы вызываете make_helperfunc
с данным origarg
, эта функция создает другую функцию, локальную рекурсивную helperfunc
функция, которая фиксирует в своей лексической среде переменную origarg
. Возвращаемое значение называется замыканием .
В вашей основной функции сначала необходимо создать такое замыкание, используя origarg
, и вызвать его:
let mymain origarg =
let helper = make_helperfunc origarg in
let results = helper origarg in (results, origarg)
Здесь аргумент helper
также origarg
, но это просто совпадение.