F# 模块五。F中的名称空间#

我有一个用F写的图书馆,被C和F所消耗。此库在模块bar中的命名空间random中定义了一个类foo: #light namespace random module bar type foo() = ... 现在,当我使用typerandom.foo.bar时,C#intellisense将其视为typebar,嵌套在typerandom.foo中 问题是:将外部可使用的代码定义为模块而不是名称空间对C有好处吗?我知道模块是对函数进行分组的好方法,但是类呢?如果您发布F#组件以供其他.Ne

F# F上的泛型类型定义语法#

这没什么大不了的,但是在F#中有没有办法不调用GetGenericTypeDefinition()而获得泛型类型定义IComparable是IComparable(或推断出的任何类型),而IComparable是语法错误 VB.NET GetType(IComparable(Of )) C# typeof(i可比较) F# typeof.GetGenericTypeDefinition() 您想要“typedefof” printfn“%s”(typedefof).Name 请注意,在极少数

F#测量单位,在不丢失测量类型的情况下铸造

是否有内置版本的类型转换函数可以保留单位,若并没有,我将如何制作它们?例如,对于这段代码,我如何将intWithSecondMeasure转换为浮点,而不丢失度量值或乘以1.0 []类型s 设IntWithSecondMeasure=1 让justAFloat=以秒为单位浮动 我不认为有一种内置的方法可以做到这一点,但您可以轻松定义自己的单位保留转换函数: let float_unit (x:int<'u>) : float<'u> = unbox float x let

r将此F#代码转换为尾部递归

我写了一些代码来学习F#。 以下是一个例子: let nextPrime list= let rec loop n= match n with | _ when (list |> List.filter (fun x -> x <= ( n |> double |> sqrt |> int)) |> List.forall (fun x -> n % x <> 0)) -> n

F#枚举类型约束的用例?

根据文档,表单的枚举类型约束 :enum是“非通用”。它的不同寻常用途是什么?首先想到的是用强类型包装器包装System.Enum的成员: // gets all underlying values for which an enum is defined let definedVals<'a, 'b when 'a : enum<'b>> = System.Enum.GetValues(typeof<'a>) |> Seq.cast<

用Mono运行F#代码

我已经安装了F#2.0.0,并使用mono 2.8 let rec fib n = match n with | 1 | 2 -> 1 | n -> fib(n-1) + fib(n-2) let n = 40 let x = fib(n) printfn "%d" x 我用fsc.exe编译了这段代码以获得fib.exe。使用mono fib.exe运行此命令会导致此错误 mono fact.exe Could not load file or ass

F#接受两个参数为大整数的幂问题

我目前正在试验F#。互联网上的文章很有帮助,但作为一名C#程序员,我有时会遇到一些情况,我认为我的解决方案会有所帮助,但没有或只是部分帮助 因此,我对F#(很可能还有编译器的工作原理)缺乏了解,这可能是我有时完全目瞪口呆的原因 例如,我编写了一个C#程序来确定完美数。它使用了欧几里德证明的已知形式,即梅森素数2p可以形成一个完美数−1(2p−1) (其中2p-1是素数,p表示为的幂) 由于F#的帮助说明“**”可以用来计算幂,但使用浮点,因此我尝试创建一个带有位移位运算符的简单函数(我认为定义P

F# 重写F中的继承成员#

下面的代码生成“t1 t2”。我想知道是否有人可以告诉我如何改变它,以便得到“t1 t2”。在t2中使用“override”而不是“member”是一个错误,我不明白为什么。我非常乐意使用RTFM,只要我知道在哪里以及在什么FM中查找 非常感谢,如果我错过了一些我想要的东西不可能实现的基本原因,我会感到抱歉 type myinterface = abstract member doit : unit -> unit type t1 () = interface myinter

使用Clp作为解算器的F#LP DSL 自从微软解决方案基金会被弃用以来,我试图找到一种替代或合理的方法来创建自己的DSL。

我所寻找的是一个DSL,它可以用F#来描述LP,用Clp来解决它,并评估结果 在我重新发明轮子之前:有人知道一个已经为LPs提供DSL的好库吗 否则,您将如何在F#中构建这样的DSL?基本上,我希望能够写一些 let xs = createVars 100 in 0..1 let ys = [| 1 .. 100 |] let f i x = i*x let lp = minimize sumprod(xs, ys) subjectTo [ xs.[0] + xs.[1]

F# 是否有库函数或运算符来创建元组?

给定一个数字字符串,我希望有一个元组序列映射非零字符及其在字符串中的位置。例如: IN: "000140201" OUT: { (3, '1'); (4, '4'); (6, '2'); (8, '1') } 解决方案: let tuples = source |> Seq.mapi (fun i -> fun c -> (i, c)) |> Seq.filter (snd >> (<>) '0

F#下的xUnit测试:看起来像你';正在尝试执行xUnit.net单元测试(';System.ArgumentException';发生在xUnit.runner.utility.dll中) 0我的设置如下 1.packages.config中的内容: 4.我的测试文件:

问题: 我做错了什么? 更新: 这是我在调试模式下运行时所说的: 'ProcessInvocation86.exe' (Managed (v4.0.30319)): Loaded 'C:\windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Symbols loaded. 'ProcessInvocation86.exe' (Managed (v4.0.30319)

F# 基于函数调用的判别并集模式匹配

我的问题是受这个启发的: 下面是一个代码: type A = | X of int * int | Y of string let f (A.X(a, b)) = a + b 它可以工作,但有一个警告: 有道理;我没有你的对手 但是如果我加上一行 let f (A.Y(s)) = 10 然后我得到一个错误: 有没有一个很好的方法来修复它,并且仍然在函数参数中使用模式匹配?如果没有,那么为什么他们会创建这样奇怪的语法,总是导致警

从C使用F#异步#

假设我有以下代码: namespace Library1 open System.Threading.Tasks open System.Threading open System.Runtime.Remoting.Messaging open System type public Class1() = let printThread (message) = printfn "%s %A" message Thread.CurrentThread.ManagedT

F# 函数[x]->;是如何实现的。。。工作

我在浏览FSharp.Data的源代码时遇到了这行代码 let (|Singleton|) = function [l] -> l | _ -> failwith "Parameter mismatch" 函数[l]是我不理解的。更具体地说,我不理解[l]参数是如何工作的 通过在FSI中的实验,我可以确定它启动了一种模式匹配形式,类似于match[l]with…。但是,我无法理解F#编译器如何解释表达式 我想知道的是它实际上是如何工作的,它遵循什么规则。它相当于 let (|Sin

F#数据类型提供程序-使用字符串变量创建

在F#中,我有以下代码 [<Literal>] let fname=fstFile.FullName.ToString() type genomeFile = CsvProvider<fname> 如果没有实际的硬编码字符串,我似乎无法创建类型。有人知道如何解决这个问题吗?问题是[]只能应用于编译时已知的东西(例如“Hello”) fstFile.FullName.ToString()的结果只有在运行时才知道 这种方法不起作用。CSV类型提供程序的参数必须是常量,以便在

F# 查询表达式自联接

如何更改此查询表达式的join子句,使我不必在选项中包装parent.ID,而只加入可能是None的候选child.ParentID query { for parent in d.People do join child in d.People on (Some parent.ID = child.ParentID) exists (child.Birthdate <= parent.Birthdate) } query{查找d中的父项。人们会这样做 在

F# Mono上的F尾调用优化问题

我有一个关于单声道F的问题。我在大学里修函数式编程这门课。在本课程中,我们使用F,我使用Xamarin作为我的编辑器 问题是,我们上了一堂关于尾部递归的课,这是一种提高效率的工具。但是当您无法编写函数尾部递归时,我们必须使用continuous,这样我们使用的是堆而不是堆栈 这在Mono3.10.0和F3.1上似乎不起作用,我得到一个System.StackOverflowException。这应该是不可能得到的,因为continuous应该使用堆 let rec fibC n c = mat

F# 在引用FSharp.Data包时,无法在LINQPad中引用FSharp.Core

我试图使用F#和FSharp.Data库测试HTML解析。我的工作如下: 我在LINQPad创建了一个新的F#程序 按F4并将FSharp.Data添加为NuGet包 然后我尝试在LINQPad中编译并运行以下程序 open FSharp.Data let results = HtmlDocument.Load("http://www.google.co.uk/search?q=FSharp.Data") results.Dump() 这将返回一个错误,告诉我需要程序集FShar

F# 在构造包含类时设置类的属性

一个类Test,它在构造时创建另一个类的实例并设置一个属性,它看起来像这样(我想): 然而,我得到了一个块,这个“let”是未完成的。需要一个表达式。 执行此操作的正确和首选方法是什么?如果要更改Size属性,必须使用赋值运算符: type Test() as this = let a = new A() do this.Init() member this.Init() = a.Size <- 10 错误是指哪一行?很好。谢谢C#语法有时很

F# 基于函数签名的模式匹配

在F#中,你能在函数签名上进行模式匹配吗。我想用一个函数来修饰一些函数,该函数度量函数的执行并调用statsd。我目前的职能是: let WrapFunctionWithPrefix(metrics:Metric.Client.IRecorder, functionToWrap, prefix) = let metricsIdentifier = (sprintf "%s.%s" prefix Environment.MachineName) using (metrics.Sta

F# FSharp数据-prod服务器上的FSharp Core出现问题

我在一个混合的F#/C#项目中使用了最新的FSharp.Data包,在移动bin目录时,使用FSharp Core的prod服务器出现问题 2015-04-13 22:09:24405[11972]警告xxx.xxxImpl-无法加载文件或程序集“FSharp.Core,Version=4.3.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。这套系统不适用于任何数据。 文件名:“FSharp.Core,版本=4.3.0.0,

F# 滥用模式匹配

我来自C#,发现自己爱上了F#模式匹配语法,因为它比C#开关更简单,而且更有用。我喜欢尽可能多地使用它,以这种奇怪的方式使用它是否有性能或任何其他缺点 match 0 with |_ when a<b -> a |_ -> b 将0与 |_当一个 |_->b 在这个特定示例中,不会有性能损失。在其他情况下,很可能也不会出现性能损失,但要绝对确定,您必须使用类似ILSpy的工具查看生成的代码 我还必须补充一点,当你使用F#时,你会发现if/then/else也非常好。在C#中,

F# 脚本可以';t加载.NET4.5?

我有一个使用.NET4.5HttpClient的F#库。它编译得很好,但当我在脚本中加载函数后尝试调用库中的函数时,脚本会说它找不到System.Net.Http 脚本和库都位于同一个针对.NET4.5的项目中 库(在TdApi.fs中)执行此操作opensystem.Net.Http但是当脚本执行此操作时,加载“TdApi.fs”交互窗口中的错误是这TdApi.fs(6,17):错误FS0039:未定义命名空间“Http”。 我正在使用VS2012,并且刚刚开始使用F#。编译库和脚本文件之间有

返回变量F#(树冠)最简单的方法

您好,我的问题是如何通过weburl和actwindow最简单的方法,因为我的返回方法不起作用。我想调用函数Logovani传递到该函数varwindow,然后接收weburl和actwindow,所以最后我像这样修复了它 member x.Logovani(window : string) = let weburl = ref "" let actwindow = ref "" "Login" &

如何访问F#HtmlProvider返回类型的内部属性?

我有以下F#HtmlProvider定义: let temp = new HtmlProvider<"http://www.geeksforgeeks.org/data-structures/">() let temp=new HtmlProvider() 在VisualStudio中,temp提供以下两个属性 Html 列表容器 ListsContainer反过来提供对单个列表项的访问,如List1、List2、List3等作为单个属性。但是,在运行时,如果我在quick

如何使用F#判别联合类型作为TestCase属性参数?

我试图测试F#函数的返回结果是否与预期的有差别的联合情况匹配。我正在使用NUnit创建测试,它不喜欢将区分的联合类型作为TestCase参数。以下测试用例未能编译: [<TestCase("RF000123", Iccm.CallType.Request)>] let ``callTypeFromCallNumber returns expected call type`` callNumber callType = test <@ Iccm.callTypeF

F# 如何将TextWritePerformat的强大功能与需要单位结果的ConditionalAttribute结合使用

我将自己设置为创建一个跟踪函数,该函数的行为类似于sprintf或printfn,但通过使用 目前为止的结果:我认为这是不可能的。 问题的核心是,当您使用条件(“DEBUG”)属性时,函数必须返回单元结果。“正常”参数正常工作,并且方法被正确修饰(编辑:修饰,是的,但可转换成员不会被删除,请参见,必须改用元组形式): 这在不使用属性的情况下有效,但使用属性时,将引发: 此表达式应具有类型 单元 但是这里有类型 string->unit 错误特别在Trace.Trace“hello:%s”下面划线

F# 从类型提供程序动态加载程序集

我正在尝试向正在使用的类型提供程序添加一个功能,以允许用户指定类型。由于类型提供程序不能提供泛型方法,因此唯一的方法似乎是引用具有该类型的程序集 我曾尝试使用Owin库中的类型对此进行概念验证,但在尝试使用提供的类型时遇到了一个问题: 它说它找不到文件,即使它显然存在,否则我正在使用的CSharpCodeProvider将给出一个错误(它以前对不正确的文件路径执行过此操作)。我尝试在一个单独的非类型提供项目中重现这个问题,但它在那里有效 此项目的代码如下(输入类型分支): 您可以通过打开主R

F# 为''|&燃气轮机;Seq.isEmpty |>;不是';

我只是想知道是否有更好的写作方式: |> Seq.isEmpty |> not 比如: |> not Seq.isEmpty 也许你喜欢 |> (not << Seq.isEmpty) |>(不是我可能会同意你目前的观点。这取决于上下文-当这是某个更大功能的结果时,我认为以下几点看起来不错: let someFunction () = someData |> Some pipeline |> Seq.isEmpty |>

F# 堆栈溢出,尽管尾部调用位置不同,但仅在64位

起源于,我有一个小F#代码()根据正态分布生成随机值: // val nextSingle : (unit -> float32) let nextSingle = let r = System.Random() r.NextDouble >> float32 // val gauss : (float32 -> float32 -> seq<float32>) let gauss mean stdDev = let rec g

F# 如何累积(扫描)数据帧值

我正在将一系列记录从数据库表加载到deedle数据框中。是否可以累积(例如,对值进行累积求和)并返回数据帧?例如,有Series.scanValues,但没有Frame.scanValues。有Frame.map,但它没有达到我预期的效果,它保留了所有的值 #if INTERACTIVE #r @"Fsharp.Charting" #load @"..\..\Deedle.fsx" #endif open FSharp.Charting open FSharp.Charting.ChartTy

F# 使用VSCode和Paket将文件添加到“.fsproj”`

我使用VSCode和Paket将库从Nuget添加到F#project/.fsproj文件中 在VSCode中,我使用ctrl+shift+p并使用命令Paket:addnumget包(到当前项目)并输入 FsVerbalExpressions version 0.4.0 不幸的是,Paket失败,出现以下错误: Paket version 3.23.2.0 Adding FsVerbaExpressions 0.4.0 to c:...\paket.dependencies into gr

F# 如何在FsXaml中使用Crystal报表

我在解决方案资源管理器中右键单击project,添加了Report.rpt和Report.fs文件。在Report.fs中,我声明了两种类型的Report()和CachedReport(),它们在C#中自动生成,并通过查看在C#WPF项目中生成的CrystalReport的.cs文件在其中添加了F代码。在Xaml中,我有 <ContentControl Content="{Binding ShowReport}"/> <Button Command="{Binding View

F# 使用XmlProvider.Load保留空白

我正在使用FSharp.Data库,如何指定以下选项: LoadOptions.PreserveWhitespace 用加载法?我试着把它传进来,但编译器抱怨没有这样的重载 type Detailed = XmlProvider<"./samples/sample.xml"> let test = Detailed.Load(fi, LoadOptions.PreserveWhitespace) type Detailed=XmlProvider let test=Detaile

从XML文件中读取值会抛出一个错误-假F#MAKE

我试图从FAKE读取XML文件中的值,但我得到了一个错误,即 .fsx(9,16) : eror FS000: Incomplete structurd construct at or before this point in expression. Expected '->' or other token. 下面是我的代码,我使用XMLHelper.XMLRead从xml文件中读取值 #r "./packages/FAKE/tools/FakeLib.dll" open Fake o

t我现在在。是否有一种从F#执行此操作的首选方法。您可以使用JsonProvider解析app settings.json文件类型设置=JsonProvider。这将为您提供对结构的键入访问权限。我如何优雅地使用这个解决方案。我试图避免将文本连接字符串传递

t我现在在。是否有一种从F#执行此操作的首选方法。您可以使用JsonProvider解析app settings.json文件类型设置=JsonProvider。这将为您提供对结构的键入访问权限。我如何优雅地使用这个解决方案。我试图避免将文本连接字符串传递给每个查询函数。我知道必须有一种方法从F#访问运行时连接字符串。这就是我在转到asp.net core并遇到此问题之前通过web配置所做的。如何从我的F#项目中正确定位appsettigs.json文件,以供开发和生产使用。不知何故,这一切现在

F# 如何从Fable-F中的其他文件打开模块#

我是Fable的新手,从不同的文件打开自定义模块时遇到一些问题 这是我的基本文件设置 node_modules | public | src |_ App.fsx |_ OtherFile.fsx 在App.fsx文件中: open CustomModule 在OtherFile.fsx文件中 module CustomModule = let greeting = printfn "hello from CustomModule" 这是我的fable

F# F中乘法表的比较#

我试着比较两种打印乘法表的方法,虽然当我打印f“%s”mulTable n和printf“%s”loopMulTable n时,它们打印的字符串相同,但在比较它们时,它们似乎并不相同,因为在最后一个函数中每次比较都会打印false。谁能给我解释一下原因吗 let a = " 1 2 3 4 5 6 7 8 9 10 1 1 2 3 4 5 6 7 8 9 10 2 2

F# 具有特定类型和属性的枚举

我想确认一只动物是否是人,它的名字是亚历克斯 个人对象: type Person(name: string) = member this.Name = name 枚举: type Animal = | Person of Person | Cat | Dog 模式匹配: let KnowAnimal animal = match animal with | Person person && person.Name = "Alex" ->

F#获取包含k个元素的子集集

给定一个包含n元素{1,2,3,…,n}的集合,我想声明一个函数,它返回包含k元素数集合的集合,例如: allSubsets 3 2 将返回[[1;2];[1;3];[2;3]],因为这些是由1.创建的集合中包含2元素的集合。。n 我已经做了初始的create-a-set-part,但是我有点被困在如何找出其中包含k元素的所有子集上 let allSubsets n k = Set.ofList [1..n] |> 更新: 我设法利用收益率得到了一个有效的解决方案: let

F# 如何使记录实现接口?

如果我有一个接口: type IData = abstract member firstName: string abstract member lastName: string 如何定义符合此接口的记录类型 我尝试了以下方法: > type Data = { firstName: string; lastName: string } interface IData ;; Snippet.js(43,63): error FS0366: No implementation

F#用于构建状态和延迟执行的计算表达式

我希望构建一个计算表达式,其中可以表达以下内容: let x = someComputationExpression { do! "Message 1" printfn "something 1" do! "Message 2" printfn "something 2" do! "Message 3" printfn "something 3" let lastValue = 4 do! "Message 4" // ne

F# 使用f从TcpClient获取Ip#

嗨,我有个问题 我有一个简单的服务器,看起来像: let private Listener ip port = async { let listener = new TcpListener(ip, port) listener.Start() _logger.Info(printfn "Server binded to IP: %A - Port: %i" ip port) while listener.Pending() = false do

F# F中的中介作用#

我有一个问题,我想基于f#中的singelton创建某种中介。主要原因是我需要在应用程序的一个部分注册一些操作,然后在另一个类似于c#的部分执行它,如下所示: public class Mediator { private static readonly object syncRoot = new object(); private static Mediator instance; public static Mediator Instance {

F# 如何让SQLProvider在dotnet core 3.1 MySQL(实际上是MariaDB)上工作?

我有一个DotnetCore3.1项目,其中nuget引用了SQLProvider,试图将目标锁定在MariaDB服务器上。 我已经添加了社区制作的包MySqlConnector。我的F#代码是 我已将文件“MySqlConnector.dll”;”System.Data.Odbc.dll“;”文件夹“dll”中的System.Data.SqlClient.dll。建议将此作为来自的修复 我已尝试安装错误中提到的每个程序集。似乎无法让它工作 编辑 这是我的fsproj代码片段 <ItemG

F#:在函数声明中指定自定义类型(复数对)

我指定了一个自定义类型,它接受两个浮点并使它们成为一对(复数): makeComplex函数的类型是float->float->complex,这是完全正确的。但是,我想创建一个函数,它采用复杂类型,并使其成为普通对。 这是我尝试过的功能: let complexToPair ((x,y):complex) = (x,y);; 但是结果类型是float*float->float*float,而实际上它应该是复杂->float*float。我是否对((x,y):complex)部分使用了错误的

F#TcpListener/客户端类不写入?

我正在尝试设置服务器/客户机,目前我正在做一个echo服务器,以确保与侦听器和客户机的连接正常 但是我遇到了一个问题,当试图从一个简单的客户端向我的服务器发送数据时,它没有得到发送,或者在我强制关闭终端中的客户端后它得到发送 我以前用C写过一个服务器/客户端应用程序,但现在我正在用F#尝试 客户端代码: let Client (ip :IPAddress, port) = use client = new TcpClient(ip.ToString(), port) use read

F# 远程服务器没有对出站关联的响应。员工在[15000毫秒]后超时

有人知道为什么会出现关联错误吗 我有一个服务器和客户端系统,客户端的参与者通过Akka远程处理向服务器参与者发送消息,服务器和客户端位于同一台本地计算机上,但使用不同的端口 服务器客户端出错: [ERROR][12/1/2020 3:59:28 AM][Thread 0021][akka.tcp://RemoteSystem@localhost:8876/system/transports/akkaprotocolmanager.tcp.0/akkaProtocol-tcp%3A%2F%2FRe

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