Здравствуйте, Poopy Joe, Вы писали:
PJ>Здравствуйте, Mumitroller, Вы писали:
M>>Вроде бы достаточно очевидно — получится функция f с двумя аргументами, которая возвращает значение такого же типа, как и f1.
PJ>Что там очевидного? Ни имени аргументов, ни их порядка. В случае f# это может выглядеть как
PJ>let f a b c = fun a c -> ... или let f a b с = fun c a -> ...
Просто скажу, что без лишних ухищрений в F# возможен только первый вариант:
using System.Console;
def f1 (a, b, c) {
a * b / c
};
def partialFunction1 = f1 (10 , _ , _);
def partialFunction2 = f1 (_ , 10, _);
def partialFunction3 = f1 (_ , _ , 10);
def regularFunction (a, c) {
f1 (a, 10, c)
};
В этом случае:
let f a b c = fun a c -> a + b + c
вероятно лямбда перекроет аргументы a и c и сможет использовать значение b.
Только зачем? ведь применение f к 3 аргументам создаст функцию с двумя аргументами (int -> int -> int).
Непонятно, однако.
Здравствуйте, varenikAA, Вы писали:
AA>синтаксис F# шикарен, тут я согласен, Nemerle конечно не хватает изящества, но он по-крайней мере описывает тип после имени, что уже ставить его наголову выше C#.
AA>Сравните:
AA>AA> let headers (lines : seq<string>) =
AA> let printLine s = s |> fprintf out "%s\r\n"
AA> lines |> Seq.iter printLine
AA> printLine ""
AA> out.Flush()
AA>
AA>и
AA>AA> def headers (lines) {
AA> lines.Iter(ou.WriteLine);
AA> ou.WriteLine("");
AA> ou.Flush();
AA> }
AA>
AA>Объективно, что лучше?
let headers lines =
lines |> Seq.iter (fprintfn out "%s")
fprintfn out ""
out.Flush()