#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. Спасибо тебе, Джон. Похоже, мне нужно каким-то образом откорректировать функцию, превратив ее в однопараметрическую функцию из некоторого разнородного списка исходных параметров.