我刚开始学习F#(之前几乎没有.NET经验),请原谅我可能是一个非常简单的问题:F#中命名空间和模块之间的区别是什么?
谢谢
戴夫
编辑:谢谢Brian的回答.这就是我想知道的.只是澄清:您是否也可以打开命名空间(类似于C#using语句)?
我不明白F#中的价值限制是如何运作的.我已经阅读了wiki中的解释以及MSDN文档.我不明白的是:
例如,为什么这给了我一个价值限制错误(取自这个问题):
let toleq (e:float<_>) a b = (abs ( a - b ) ) < e
Run Code Online (Sandbox Code Playgroud)
但这不是:
let toleq e (a:float<_>) b = (abs ( a - b ) ) < e
Run Code Online (Sandbox Code Playgroud)这一点可以概括......
let is_bigger a b = a < b
Run Code Online (Sandbox Code Playgroud)
但这不是(它被指定为int):
let add a b = a + b
Run Code Online (Sandbox Code Playgroud)为什么带隐式参数的函数会生成值限制:
这个:
let item_count = List.fold (fun acc _ -> 1 + acc) 0
Run Code Online (Sandbox Code Playgroud)
对此:
let item_count l = List.fold (fun acc _ …Run Code Online (Sandbox Code Playgroud)我写了以下函数:
let str2lst str =
let rec f s acc =
match s with
| "" -> acc
| _ -> f (s.Substring 1) (s.[0]::acc)
f str []
Run Code Online (Sandbox Code Playgroud)
如何知道F#编译器是否将其转换为循环?有没有办法在不使用Reflector的情况下找出答案(我没有使用Reflector的经验而且我不知道C#)?
编辑:另外,是否可以在不使用内部函数的情况下编写尾递归函数,或者循环是否需要驻留?
另外,F#std lib中是否有一个函数可以多次运行给定函数,每次都将最后一个输出作为输入?让我说我有一个字符串,我想在字符串上运行一个函数然后再次在结果字符串上运行它等等...
我们在f#中创建类的方式存在这种二分法,这真的困扰我.我可以使用隐式格式或显式格式创建类.但是我想要的一些功能只能用于隐式格式,有些只能用于显式格式.
例如:
我不能在明确定义的类中使用let inline*(或let单独).
在隐式定义的类中定义不可变公共字段(不是属性*)的唯一方法(我知道)是val bla : bla语法.
但这里有一个冗余.因为我最终会得到两个相同的不可变数据副本,一个私有,一个公共(因为在隐式模式下,构造函数参数在整个类存在期间持续存在)
(不太相关)使用属性进行方法重载和字段默认值的需求相当不合适.
无论如何我可以解决这个问题吗?
*出于性能原因
编辑:结果我错了两点(感谢Ganesh Sittampalam和MichaelGG).
免责声明:我不是正则表达专家.
我正在使用Python re模块在许多htm文件上执行正则表达式匹配.其中一种模式是这样的:
<bla><blabla>87765.*</blabla><bla>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,不是找到所有(比如说)五次出现的模式,而是只找到一个.因为它将所有出现的事件焊接成一个,使用<bla><blabla>87765第一次出现的</blabla><bla>部分和页面中最后一次出现的部分.
有没有办法告诉重新找到最小的比赛?
我不是Regex的专家.我正在尝试创建一个正则表达式,它将匹配完全相同数量的开始和结束括号,但我很难过如何做到这一点.
一个例子:
nothing: important, a b { c {{{ a another {{ nothing }} }}} }
Run Code Online (Sandbox Code Playgroud)
要么:
one { two {{ error, forgot ending brace }}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道我预先会得到多少支撑.在第一个例子中,我需要获取文本{ c {{{ a another {{ nothing }} }}} }.在第二个我需要得到{{ error, forgot ending brace }}.
甚至可以创建一个匹配规则来执行此操作吗?(我正在使用Qt Regex引擎).