相关疑难解决方法(0)

什么是catamorphism并且可以在C#3.0中实现?

我正在尝试了解catamorphisms,我已经阅读了维基百科文章以及F#博客上F#主题系列中的第一篇文章.

我理解这是折叠的概括(即,将许多值的结构映射到一个值,包括值列表到另一个列表).我认为折叠列表和折叠树是一个典型的例子.

可以使用LINQ的Aggregate运算符或其他一些更高阶的方法在C#中显示它吗?

c# f# functional-programming catamorphism recursion-schemes

26
推荐指数
3
解决办法
9823
查看次数

由于函数是F#中的第一类值,为什么我不能将lambdas用作值?

如果我定义一个简单的函数:

let myConcat a b = 
    a + "+" + b
Run Code Online (Sandbox Code Playgroud)

然后假设函数是F#中的第一类值,我希望能够myConcat像这样使用:

let result = myConcat "a" (fun () -> "b")
Run Code Online (Sandbox Code Playgroud)

它没有产生字符串"a + b",而是给出了以下错误:

error FS0002: This function takes too many arguments, or is used in a context where a function is not expected
Run Code Online (Sandbox Code Playgroud)

希望我只是让语法错误,但在我看来,函数不能真正用作F#中的值.谁能解释一下这里发生了什么?

编辑 为了进一步澄清我的要求,我可以拥有等效的C#代码:

public string myConcat(string a, string b) { return a + "+" + b; }
Run Code Online (Sandbox Code Playgroud)

如果我想在param b中传递"稍后调用函数",我必须这样做:

public string myConcat(string a, Action<string> b) { return a + "+" + b(); }
Run Code Online (Sandbox Code Playgroud)

或者我可以这样称呼它: …

f#

3
推荐指数
1
解决办法
679
查看次数