TOGOUTECH

functional-programming

全部标签

c# - C# 中面向铁路的编程 - 如何编写开关函数?

我一直在关注thisF#ROParticle,并决定尝试在C#中重现它,主要是看看我是否可以。对于这个问题的长度,我们深表歉意,但如果您熟悉ROP,将很容易理解。他从F#discriminatedunion开始......typeResult<'TSuccess,'TFailure>=|Successof'TSuccess|Failureof'TFailure...我将其翻译成一个抽象的RopValue类,以及两个具体的实现(请注意,我已将类名更改为我理解得更好的名称)...publicabstractclassRopValue<TSu

c# - 对于有经验的 C# 3.0 开发人员来说,学习 F# 有多难?

对于经验丰富的C#3.0开发人员来说,学习F#有多难,和/或您认为学习F#最困难的部分是什么? 最佳答案 从F#开始(学习语法,了解如何以函数式方式编程)并不难。熟悉LINQ并深入了解Lambda表达式的优秀C#3开发人员应该能够快速掌握基础知识。很难说他们要改掉面向对象解决问题的习惯有多难,但是需要函数式解决方案的问题应该迫使他们做出这一飞跃。在我看来,除非你遇到新问题,否则很难改变你的想法。总而言之,我会说我花了一周的时间在业余时间(每晚2-3小时)学习该语言的语法和基础知识。不过,您需要更多时间才能真正了解函数式编程。问题我仍

c# - 使这项工作起作用的流畅对象模型是什么?

作为编写流畅API的练习,我想我会编译并运行以下代码:staticvoidMain(string[]args){Enumerable.Range(1,100).When(i=>i%3==0).Then(i=>Console.WriteLine("fizz")).When(i=>i%5==0).Then(i=>Console.WriteLine("buzz")).Otherwise(i=>Console.WriteLine(i)).Run();Console.ReadLine();}想法是.When将测试枚举中的每个元素,如果

c# - 您将如何使用 SelectMany 实现 LINQ 方法?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预期结果。另请参阅:StackOverflowquestionchecklist关闭9年前。ImprovethisquestionErikMeijerisfondofpointingoutthateveryLINQfunctioncouldactuallybeimplementedbySelectMany;everythingelseisjustaconvenience.这就是EricLipperts

c# - 如何从 C# 中的 "pure function"获得优化?

如果我有以下函数,它被认为是纯粹的,因为它没有副作用,并且在给定相同输入x的情况下总是会产生相同的结果。publicstaticintAddOne(intx){returnx+1;}据我了解,如果运行时了解功能纯度,它可以优化执行,这样就不必重新计算返回值。有没有办法在C#中实现这种运行时优化?我假设这种优化有一个名称。它叫什么?编辑:显然,我的示例函数不会从这种优化中获得太多好处。该示例是为了表达我心目中的纯度类型,而不是真实世界的示例。 最佳答案 正如其他人指出的那样,如果您想节省重新计算您已经计算过的结果的成本,那么您可以内存

c# - 使用 vs lambda

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。是否等价?publicstaticvoidUsing<T>(thisTdisposable,Action<T>action)whereT:IDisposable{try{action(disposable);}finally{disposable.Dispose();}}newSqlConnection("").Using(conn=>{});usi

c# - Nullable 可以用作 C# 中的仿函数吗?

考虑以下C#代码。publicintFoo(inta){//...}//insomeothermethodint?x=0;x=Foo(x);最后一行会返回一个编译错误cannotconvertfrom'int?'到'int'这很公平。但是,例如在Haskell中有Maybe,它对应于C#中的Nullable。因为Maybe是一个Functor,所以我可以使用fmap将Foo应用于x>。C#有没有类似的机制? 最佳答案 我们可以自己实现这样的功能:publicstaticclassFuncUtils{publicstaticNulla

c# - 参数数量未知的 Func<>

考虑以下伪代码:TResultFoo<TResult>(Func<T1,T2,...,Tn,TResult>f,paramsobject[]args){TResultresult=f(args);returnresult;}函数接受Func<>具有未知数量的通用参数和相应参数的列表。可以用C#写吗?如何定义和调用Foo?我如何通过args至f? 最佳答案 您可以将Delegate与DynamicInvoke一起使用。有了它,您就不需要处理f中的object[]。TResultFoo<TRes

c# - 仿函数和 "generics"有什么区别

我正在查看OCaml'sfunctors.在我看来,它与C++/C#/Java中所谓的通用对象非常相似。如果您暂时忽略Java的类型删除,并忽略C++模板的实现细节(我对语言特性感兴趣),仿函数与泛型完全相同。如果我理解正确的话,仿函数会根据您提供的类型为您提供一组新的函数,例如List<MyClass>.GetType()!=List<MyOtherClass>.GetType()但是你可以粗略地重写OCaml的#moduleSet=functor(Elt:ORDERED_TYPE)->structtypeelement=Elt.ttypeset

c# - 我是否使用 C# 动态实现了 Y 组合器,如果没有,它是什么?

我的大脑似乎处于自虐模式,所以在被this淹没之后,this和this,它想在C#中进行一些DIY。我想到了以下内容,我认为不是Y组合器,但它确实似乎设法使非递归函数递归,不涉及自身:Func<Func<dynamic,dynamic>,Func<dynamic,dynamic>>Y=x=>x(x);鉴于这些:Func<dynamic,Func<dynamic,dynamic>>fact=self=>n=>n==0?1:n*self(self)(n-1);Func<dynamic,Func<dyn