F# 在F中,>&燃气轮机;是什么意思?

我注意到其中包含>>操作符的一些代码: let printTree = tree >> Seq.iter (Seq.fold (+) "" >> printfn "%s") >>操作员的意思/作用是什么 编辑: 非常感谢,现在清楚多了。 下面是我为了解诀窍而生成的示例: open System open System.IO let read_lines path = File.ReadAllLines(path) |> Array.to_list let

简化表达式F#

我希望表达式(x-x)简化为0 type aexpr = | CstI of int | Var of string | Add of aexpr * aexpr | Sub of aexpr * aexpr | Mul of aexpr * aexpr;; let rec simplify expr = match expr with | Add(CstI(n1), CstI(n2)) ->CstI(n1 + n2) | Sub(CstI(n1), CstI(n2)) ->Cs

F# F+中的等式推理;具有可变字段的记录

通用的相等/比较成员设计准则是不在可变引用类型上实现结构相等,而是查看具有可变字段的F#记录类型: type Value = { mutable value: int } let mutableRecord = { value = 1 } let xs = Map.ofList [ mutableRecord, "abc" { value = 2 }, "def" ] let abc = Map.find { value=1 } xs mutabl

F# 更改文件顺序

我已经开始在Mac上使用MonoDevelop for F#了。它很酷,只是它经常崩溃。困扰我的一件事是,我无法更改项目中F#源文件的顺序。这可能吗?如果不是这样的话,组织项目就有点像噩梦了。是的,你可以对文件重新排序。在“项目选项”(project options)中(在“生成”选项卡下)有一个用于执行此操作的特殊选项卡 不幸的是,使用文件浏览器无法做到这一点(因为MonoDevelop会自动按文件名对文件进行排序,并且无法禁用它)。如果您使用的是MonoDevelop 4.x和最新版本的F#

F#-从Expr中提取选项

有没有办法从Expr中提取参数 例如: let hasStringOption (e:Expr<string option>) = let myOption : string option = ..some code to get the string option from e 让hasStringOption(e:Expr)= 让myOption:string option=…从e获取字符串选项的一些代码 我如何在Expr中获取string选项,并将其分配给myOpt

F# 度量单位的界/域

我觉得F#度量单位的概念非常吸引人。然而,通常情况下,一些单位有他们居住的特定领域。例如,距离是一个正数,温度大于开尔文零,概率介于0和1之间,等等-但我没有看到任何内置的东西来表示这个概念,并验证特定值是否是特定单位的有效度量。度量单位是否支持这样的行为(我不这么认为),如果不支持,有没有推荐的方法来实现这种行为?F#中的度量单位不支持行为。它们是编译期间用于抛出类型错误的静态机制。您需要一个对象来封装任何“行为”。例如,您可以创建一个类型Temperature,为绑定检查提供操作符。如果您传

F# 元组函数组合

我很好奇为什么会这样 let f = (fun a b -> a, b) >> obj.Equals 给出了错误 没有名为“Equals”的可访问成员或对象构造函数接受1个参数 但这是有效的 let f = (fun a -> a, a) >> obj.Equals 以类型为例(>>)的类型是('a->'b)->('b->'c)->('a->'c),但是您试图用'a->('b->'a*'b)和obj*obj->bool类型的参数来调用它,而这些参数不能像这

F# 没有通用参数时的值限制

我在下面的代码中得到了let Makelem上的值限制错误: let elemCreator (doc: XmlDocument) = fun name (value: obj) -> let elem = doc.CreateElement(name) match value with | :? seq<#XmlNode> as childs -> childs |> Seq.it

如何使用F#中的类型提供程序连接到SQL Server Compact Edition 4.0?

我正在尝试从F#连接到SQL Server Compact Edition数据库,并尝试使用类型提供程序。这是在VisualStudio11测试版中,所以我意识到可能会因此产生问题,但我认为更可能的是我还没有这方面的知识 但是,我注意到Microsoft.FSharp.Data.TypeProviders中没有特定于CE的类型提供程序,并且我不确定常规的SqlDataConnection是否会起作用,因此这可能就是问题所在 然而,当我尝试创建连接时,IDE似乎意识到我正在尝试访问CE数据库,至少

F# 在F中编写脚本文件的测试

我有一些脚本文件setup.fsx的功能 我想测试一下。 xUnit等需要测试的功能才能成为程序集的一部分 因此,我考虑将脚本从setup.fsx重命名为setup.fs扩展名,然后从另一个脚本文件加载它。但我的剧本取决于 #r "System.Xml" #r "System.Xml.Linq" 然后我必须在调用脚本中远离依赖关系实际产生的地方指定它 在xUnit工作流中是否有基于脚本的集成测试? 建议哪个组织编写脚本文件的测试 可能我们需要一个visual studio扩展,用于在脚本中而不

F# F“查询”;不';“不包含”;

当项目包含在列表中时,有一个查询要搜索,但当项目不包含在列表中时,没有查询 此查询查找给定列表中没有ContactNum的customer对象。我该怎么做才能仅返回此列表中没有ContactNum的客户 let q = query { for c in dc.Customers do where (query { for n in cdiffnums do contains c.ContactNum }) select c } 我

F# “你做什么?”;mustinline值。。。未推断出具有已知值;及;在优化环境中标记为“内联但未绑定”;什么意思?

在Visual Studio 2012中使用F#时,我遇到了一个编译时错误,我不理解 我可以在这里找到一个小片段: 以下错误消息是什么意思 /home/iU0RLi/prog.fs(3,22): error FS0073: internal error: the mustinline value 'Bar' was not inferred to have a known value /home/iU0RLi/prog.fs(5,1): error FS1114: The value 'Pro

统一时具有无限类型约束的f#接口

我在获取具有类型约束的接口以使其正常工作时遇到问题 这是类型 type LeftistHeap<'a when 'a : comparison> = ... interface IHeap<LeftistHeap<'a>, 'a> with ... member this.Insert (x : 'a) = LeftistHeap.insert x this type LeftistHeap= ... 与IHeap的接口 ... 成员

F# 并行化阵列创建

F# C# Object[]newItemArray=新对象[items.Count]; Parallel.For(0,items.Count,index=> { /*这里有复杂的东西*/ newItemArray[索引]=新对象(); }); 我让上面的C和F做同样的事情。没有并行的。对于,F#稍微快一点。与并行。对于而言,C#需要一半的时间来执行。如何正确地将F并行化以获得与C相同的性能提升 到目前为止,我尝试的方法是Array.Parallel.Iteri,因此我可以将相同的索引用于我在

如何在F#中组合查询表达式?

我一直在看这里的查询表达式 我一直在想为什么下面的说法是合法的 let testQuery = query { for number in netflix.Titles do where (number.Name.Contains("Test")) } 但你不能真的做这样的事 let christmasPredicate = fun (x:Catalog.ServiceTypes.Title) -> x.Name.Contains("Christm

F#中的采样:设置是否足够?

我有一系列的项目,我想从中取样 我的印象是,一个集合将是一个很好的取样结构,在一个折叠中,我将返回原始集合或一个修改过的集合,其中检索到的元素丢失,这取决于我是否希望替换掉它。 然而,似乎没有直接从集合中检索元素的方法 我有什么遗漏吗?或者我应该使用一组索引,以及一个代理函数,该函数从某个随机位置

F#删除数组中的某个元素

我在F#数组模块中进行了研究,但似乎没有任何函数可以从数组中删除某个元素。我只是想知道是否存在这样的函数 例如 更新 数组过滤器是我要找的。除此之外,对我的情况要具体一点 如果我拥有的数组不是普通类型数组,而是特定于类的引用数组。假设我只想删除member.order=2的元素,那么谓词是什么 您可以使用F#数组模块功能实现此功能,如下所示: > [| 0 ; 1 ; 2 ; 3 ; 4 |] |> Array.filter ((<>)2);; val it : int

F#中的底部/未定义值?

Haskell中有一个方便的值,可以用作代码中尚未定义的函数/路径的存根。F#里有类似的东西吗 我想 failwith "Not implemented" 将相当于具体而言,您可以定义如下值: let undefined<'T> : 'T = failwith "Not implemented yet" let stub1 (x : int) : float = undefined let stub2 (x : 'T) : 'T = undefined 让未定义的更加具体和.N

F# 如何使FsLex规则尾部递归/防止StackOverflowException

我正在用fslex/fsyacc实现一种脚本语言,但在大用户输入(即>1k个脚本)时遇到问题,特别是当lexer分析一个非常大的字符串时,会发生此错误 我在自定义lexer函数中扫描字符串(允许用户用反斜杠转义引号之类的字符)。下面是函数: and myText pos builder = parse | '\\' escapable { let char = lexbuf.LexemeChar(1)

F# 打印大于屏幕大小的表单

我有一张表格,上面有计算数据和图表,大约是纸张大小的A4格式。这使得CopyFromScreen方法无法截屏整个表单。更改屏幕分辨率不是一个好主意,因为该程序应该可以在多台计算机上运行。在下面的代码中,您会发现两个captureScreen函数,其中只有一个应该使用,但没有一个可以打印整个表单。只有我报告的上半部分打印到图像上。有什么建议吗 open System.IO open System.Drawing open System.Windows.Forms open System.Drawi

F#管道占位符?

我有点谷歌,但我还没有找到我要找的东西。正如所料。我的问题是,是否可以定义F#管道占位符?我想要的是如下所示: let func a b c = 2*a + 3*b + c 2 |> func 5 _ 6 计算结果为22(2*5+3*2+6) 为了进行比较,请查看magrittrR包:我认为这是不可能的,但是您可以简单地使用lambda表达式,如 2 |> (fun b -> func 5 b 6) 您可以使用这样的新功能: let func a b c = 2*a +

F# SqlDataConnection的语法

使用app.config文件中的连接字符串名称时,定义SqlDataConnection类型提供程序的语法是什么。我有一个包含两个项目的解决方案。主项目是MVC5项目,第二个是F#项目。在f#项目中,我定义了一个带有数据库连接字符串的app.config文件,并将我的SqlDataConnection定义为: SqlDataConnection<ConnectionStringName="dbname", ConfigFile="app.config"> SqlDataConnec

F# 为F Deedle指定空值

在将csv加载到Deedle数据结构中时,是否可以指定一个自定义值来表示null或NaN?在Python中,这是一个可配置的列表选项 通常,csv的输入数据将包含一些表示null的任意值,而列的其余部分则具有有效的值double type。目前,我必须将它们全部加载,然后将一个函数应用到tryparse double列 谢谢 casbby这目前不受支持,但我同意这将非常有用!我创建了一个 我们肯定会在某个时候添加它,但如果您想贡献并添加对指定自定义缺失值的支持,这实际上相当容易。Deedle使用

F# &引用;使用F“交互式…”运行;64位Windows中缺少.fsx文件的上下文菜单选项

我知道这不是你典型的编程问题,但它困扰着我 我刚刚在两台Windows8.1机器上安装了F#3.1.1捆绑包:一台32位,另一台64位 我有几个用于工作的F#脚本(.fsx文件),当我在32位系统中右键单击该文件时,它如下所示: 另一方面,在64位系统中,它看起来是这样的: 您可能会注意到“使用F#Interactive运行…”菜单项缺失,图标不同。我已经试过修理包裹了,没用。如何将上下文菜单项输入64位Windows资源管理器?这两个系统都是新安装的 我希望答案不会涉及一些可怕的注册表黑客

向Geany添加F#支持

我到处都找遍了,我似乎是这个星球上唯一一个想这样做的人。我已经尝试了所有常用的方法,制作filetypes.Fs.conf、filetypes.Fs、编辑配置,你都做了些什么。它总是认为.fs是Forth,我无法阻止它,即使删除Geany中的Forth文件或删除syntax config中的Forth部分也无法阻止它。此外,我无法让F#出现在语言列表中。如果有帮助的话,我正在使用Windows 7。指向页面,这是关于扩展Geany的页面,用于添加对其他语言的支持 你能澄清一下你的问题是什么吗?对

F# 将MonoBrickFirmware.dll库ev3按钮值获取为F中的十六进制

这是我在F中的代码,我使用的是MonoBrickFirmware.dll库。为了得到Button的值,我试图定义buts 但它不起作用,我仍然无法将Button的值设置为十六进制或其他类型。按钮事件在F中以以下方式工作,您只需将代码复制到新创建的F控制台应用程序中的Program.fs文件中即可: let buts: ButtonEvents = new ButtonEvents() let event = mat

F# 如何防止急于评估?

我正在尝试一些大量使用printfn的示例。我创建了一个控制台应用程序,但所有函数都会打印输出,无论我是否调用它们。我相信我的错误背后是热切的评价。这是我的密码: TextFormat.fs: module TextFormat let printPi = let pi = System.Math.PI printfn "float: %f, exponent: %e, compact: %g" pi pi pi let petabyt

F# Deedle:将时间序列分为前三名和其他名

我有一个关于选举数据的Deedle系列,如: "Party A", 304 "Party B", 25 "Party C", 570 .... "Party Y", 2 "Party Z", 258 我想创建一个新系列,如下所示: "Party C", 570 "Party A", 304 "Party Z", 258 "Others", 145 因此,我想将前三名按原样排列,并将所有其他人相加,作为新的一行。最好的方法是什么?

如何动态取消F#中的值的装箱?

我正在尝试实现下面第四行中的自动/动态转换: let a = 1 // type: int let b = box a // type: obj b.GetType() // System.Int32, so it is perfectly aware what it is! let c = unbox b // fails.... 以下内容适用于上面的最后一行,但需要我提前知道并明确标记我正在使用的原语/值类型(我正试图避免): 虽然b在运行时知道它是什么,但编译器不知道,因为它是obj

F#多条件if/else与匹配

我是F#的新手,一直在实现简单的算法来学习语言结构。我使用if/else实现了二分法,然后想学习如何使用匹配 if fc = 0.0 then printfn "%i/%i - f(%f) = %f, f(%f) = %f, f(%f) = %f" new_count n a fa b fb c fc else if ((b - a) * 0.5) < eps then printfn "%i/%i - f(%f) = %f, f(%f) = %f, f

F# 如何使用F为属性声明私有setter#

在C#中,我们可以为属性声明私有setter。 如何使用F#实现这一点 具体来说,如何确保只能从类内更改属性的状态 例如,如何将FirstName setter属性声明为private,如在C#中 public string FirstName{get;private set;} 键入SomeViewModel()= 继承ViewModel() 让可变名字=“” 让可变lastName=“” 请记住这个名字 使用get()=firstName 和设置(值)= firstName成员this.f

F# System.IO.DeleteFile引发UnauthorizedAccessException

我试图使用System.IO.DeleteFile删除一个文件,但它莫名其妙地抛出了UnauthorizedAccessException。我意识到这已经被问过很多次了。我已经看过了所有我能找到的问题,但没有一个答案是适用的。我碰巧用的是假的,但问题似乎更一般 以下是我的整个build.fsx: // include Fake lib #r @"packages/FAKE/tools/FakeLib.dll" open Fake open System.IO Target "Default"

F#Yaml类型提供程序

我已尝试在配置文件中使用Yaml贴图集合: Companies: - code: 11 name: A country: FR functionalCurrency: EUR - code: 12 name: B country: GB functionalCurrency: GBP 但是,当尝试使用类型提供程序读取它时,它只会找到列表的第一个结果 与: open FSharp.Configuration type Compani

F# 什么';使用类型来表示函数有什么好处?

让类型表示函数有什么好处 例如,我观察到以下片段: type Soldier = Soldier of PieceProperties type King = King of PieceProperties type Crown = Soldier -> King 它只是为了在其他参数尚未满足时支持部分应用吗?正如Fyodor Soikin在评论中所说的那样 和你给其他东西命名的原因一样-值,函数, 模块等 换句话说,想想在汇编中通常不使用类型的编程(是的,我知道),以及人们可

使用F#如何访问不';是否与文档具有相同的命名空间?

这是我第一次尝试F#,我知道我仍然需要阅读很多,我会的,但是这些挑战帮助我更好地理解接下来的部分,到目前为止,我已经解决了一些最初的挑战,所以请耐心等待 xml文档如下所示: <BuildCollection xmlns="http://schemas.datacontract.org/2004/07/BuildModels" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> ... <PostEvents

F# 为什么活动模式会有这种行为?

我在Gene Belitski的优秀著作《设计模式》中找到了这段代码: let (| `` I'm active pattern `` |) x = x + 2 let (`` I'm active pattern `` y) = 40 (* val ( |`` I'm active pattern ``| ) : x:int -> int val y : int = 42 *) 作者认识到这是一个错误 “如果您还记得值的let绑定是基于模式匹配的数据反汇编的一个极端情况,那么这是一个稍

F# 函数生成的长度不正确的序列

当repl变量设置为false时,为什么以下函数返回长度不正确的序列 open MathNet.Numerics.Distributions open MathNet.Numerics.LinearAlgebra let sample (data : seq<float>) (size : int) (repl : bool) = let n = data |> Seq.length // without replacement let rec ge

F# 如何在paket.references中引用git存储库中的文件?

我的paket.dependencies文件中有一个TFS git存储库: 吉特 在该存储库中,有一个文件“src/Tools.fs” 在paket.references文件中,我如何告诉paket向该git存储库中的文件添加引用,以便paket可以将其添加到fsproj文件中?paket目前似乎不支持这一点。GitHub有单文件依赖项功能,但一般git依赖项的处理方式不同 不过,您可以半手动实现同样的效果。GitHub的工作方式是将引用文件添加为项目的链接。只要您在paket.dependen

F# 展平/重塑密度矩阵

有没有一种简单的方法来展平矩阵 // Install-Package MathNet.Numerics // Install-Package MathNet.Numerics.FSharp // Compile to move the .dlls to the bin/debug area #r @"bin/Debug/MathNet.Numerics.dll" #r @"bin/Debug/MathNet.Numerics.FSharp.dll" open System open Math

F# 如何在F中获取逗号后的数字#

我想在F#中逗号后得到4个数字: 这是我的代码: // Learn more about F# at http://fsharp.org // See the 'F# Tutorial' project for more help. open System [<EntryPoint>] let main argv = let num = Console.ReadLine() |> float Console.WriteLine(num) Con

64位F#/FSI:非常大的单文件函数的限制

我有一些化学模型,它们基于一些系数的稀疏矩阵。因此,给定模型参数,我仅基于这些系数的非零元素生成F#代码。然后将生成的模型反馈给ALGLIB()ODE解算器。系数矩阵约为99.9%至99.99%稀疏,这意味着只有0.01%至0.1%的系数不是精确的零。下面是一个非常简化的示例,演示了生成的F#模型文件的外观。使用64位FSI将函数update(x:array):array馈送给ALGLIB ODE解算器 现在,ALGLIB ODE解算器完全能够为一个简单的输入函数处理至少1M个变量。我已经测试过

F# F中的结果与域设计#

我有一个关于设计和使用结果的快速问题。 我已经阅读了关于的优秀文章,它实际上符合我的需要,因为我需要访问数据库中的数据,而一些数据可能不可用(因此会产生错误) 假设我有以下域 type Main = A * B type B = { B1 of float B2 of string } // or any type, just took 2 simple ones) 如果我不使用Result,我可以轻松访问main:main: let a = main |> fst let b1 =

意外关键字';成员';在定义中,在F#模块中

尝试获取我尝试将let更改为member和static member,但这会产生错误 错误FS0010定义中出现意外关键字“member”。在此点或其他标记处或之前应为不完整的结构化构造 OK语法: 糟糕的语法 您不能将模块中的成员定义为状态吗 成员是属于类型定义[…]F#对象类型(如记录、类、有区别的联合、接口和结构)的特征,支持成员 这就是为什么不能在模块中直接定义成员。作为状态 成员是属于类型定义[…]F#对象类型(如记录、类、有区别的联合、接口和结构)的特征,支持成员 这就是为什么不能在

F# 为什么这个序列生成不起作用?

我面临的是在不重复元素列表的情况下生成所有k组合。除了代码中可能的优化之外,我还编写了这个函数,我几乎确信它应该可以工作: // comb :: int -> 'a list -> seq<'a list> // Generates a sequence of all combinations (no repetition) let comb k xs = // subs :: 'a list -> seq<'a list> // Splits

ref和byref<&燃气轮机;F#类成员中的参数

我将一些f#函数定义重写为静态成员,并停留在ref/byref参数错误: static member bar (a : byref<int>) = Foo.bar &a Error FS0001 This expression was expected to have type 'int ref' but here has type 'byref<'a>' 静态成员栏(a:byref)=Foo.bar&a 错误FS0001此表

在F#中,如何更新可选的嵌套记录?

(新手问题) 我一直在努力用F#中的选项更新嵌套记录。这是怎么做到的 请假定: module Visit = type Model = { Id: int Name: string } let initWithTime (t:DateTime) = { Id = 0 Name = sprintf "Time is %A"

  1    2   3   4   5   6  ... 下一页 最后一页 共 106 页