Функция высшего порядка, принимающая функцию с произвольным числом параметров

#f# #functional-programming #higher-order-functions

#f# #функциональное программирование #функции высшего порядка

Вопрос:

Есть ли способ в F # написать функцию высшего порядка, способную принимать обработанные функции с произвольным числом параметров? Например, как мне написать единственную lift функцию, работающую с обоими f : x:int -> int и g : x:int -> y:int -> int ?

 let f x = x   1
let g x y = x   y

let lift1 s f x = (f x, s)
let lift2 s f x y = (f x y, s)

let fLifted = lift1 "Func f" f
let gLifted = lift2 "Func g" g
  

Комментарии:

1. Я почти уверен, что это невозможно сделать без сложных дополнительных операторов. (оставляя вас с чем-то вроде lift a <|> b <|> c )

2. Не могли бы вы подробнее рассказать об этом? В вашем примере у вас есть три значения, a b и c вводящие выражение, но я хотел бы передать только f и s . Кроме того, был бы оценен любой указатель на то, как определяется оператор <|> .

3. На самом деле я не знаю ответа в этом случае, но на такого рода вопросы обычно можно ответить подобным образом. Вероятно, самый простой способ — заставить <|> вести себя аналогично (но по-другому) :: , и вы создаете список таким образом. Лучшим примером было бы что-нибудь lift s f x <|> y <|> z <|> . Я просто пропустил другие параметры

4. Спасибо тебе, Джон. Похоже, мне нужно каким-то образом откорректировать функцию, превратив ее в однопараметрическую функцию из некоторого разнородного списка исходных параметров.