在C#中有没有相当于F#的List.map函数? 即对列表中的每个元素应用一个函数,并返回一个包含结果的新列表。 就像是: public static IEnumerable<TResult> Map<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> funky) { foreach (TSource element in source) yield return funky.Invoke(element); } 有没有内置的方式,或者我应该只写自定义扩展?
我想弄清楚如何定义一个函数,适用于多种types的参数(如int和int64)。 据我了解,函数重载是不可能在F#(编译器肯定抱怨)。 以下面的function为例。 let sqrt_int = function | n:int -> int (sqrt (float n)) | n:int64 -> int64 (sqrt (float n)) 编译器当然抱怨语法是无效的(模式匹配中的types约束似乎不被支持),但我认为这说明了我想实现的function:一个函数在多个参数types上运行,并返回一个值types。 我有一种感觉,这是可能的在F#使用genericstypes/types推理/模式匹配的一些组合,但语法躲过了我。 我也尝试使用:? 运算符(dynamictypestesting)和模式匹配块中的子句时 ,这仍会产生各种错误。 由于我对这门语言比较陌生,所以我很可能会在这里做一些不可能的事情,所以请让我知道是否有其他解决办法。
我一直在试图解释开关语句和模式匹配(F#)之间的区别,但我没有真正能够解释它..大多数时候,他们只是看着我说“那么为什么你不要只是使用..如果..“。 你将如何解释给他们? 编辑! 感谢大家的伟大的答案,我真的希望我可以标记多个正确的答案。
这是C#版本: public static IEnumerable<string> ReadLinesEnumerable(string path) { using ( var reader = new StreamReader(path) ) { var line = reader.ReadLine(); while ( line != null ) { yield return line; line = reader.ReadLine(); } } } 但直接翻译需要一个可变的variables。
我从来没有见过一个语言指数或电力运营商只采取浮点数? 例如: 2 ** 2引发错误The type 'int' does not support any operators named 'Pow' 这个devise决定是否有正当理由?
我想在f#中匹配string的开头。 不知道是否我必须把它们当作一个字符列表或什么。 任何build议,将不胜感激。 这是我正在尝试做的一个伪代码版本 let text = "The brown fox.." match text with | "The"::_ -> true | "If"::_ -> true | _ -> false 所以,我想看看string和匹配的开始。 注意我没有匹配的string列表只是写上述作为我想要做的本质的想法。
我正在寻找一些电子书,这将有助于我学习函数式编程。 我还没有决定使用哪种语言,但是我注意到了在StackOverflow社区中对LISP,Haskell和F#的相当多的偏见。 到目前为止,我还不确定我将采取哪个方向,但任何人都可以推荐关于这个主题的任何特定的电子书? 另外,如果任何人都可以提出一个引人注目的论证,哪种function语言是最有趣的,那么我会很乐意听到你的意见。 我特别感兴趣的电子书,因为我设法给自己索尼电子书圣诞节电子书阅读器,我正在寻找加载与有用的材料为我的永无止境的追求成为一个更好的程序员。
F#中的::运算符总是将元素前置到列表中。 有附加到列表中的运算符吗? 我猜测使用@运算符 [1; 2; 3] @ [4] 效率会比追加一个元素低。
在几乎所有的例子中,ML型语言中的一个y-combinator是这样写的: let rec yfx = f (yf) x let factorial = y (fun f -> function 0 -> 1 | n -> n * f(n – 1)) 这可以像预期的那样工作,但是使用let rec …来定义y-combinator感觉就像是在作弊。 我想定义这个组合子,而不使用recursion,使用标准的定义: Y = λf·(λx·f (xx)) (λx·f (xx)) 直接翻译如下: let y = fun f -> (fun x -> f (xx)) (fun x -> f (xx));; 但是,F#抱怨说,它无法弄清楚types: […]
我似乎无法find单声道的编译器/插件。 有一个存在吗?