我有一个用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#中有没有办法不调用GetGenericTypeDefinition()而获得泛型类型定义IComparable是IComparable(或推断出的任何类型),而IComparable是语法错误
VB.NET
GetType(IComparable(Of ))
C#
typeof(i可比较)
F#
typeof.GetGenericTypeDefinition()
您想要“typedefof”
printfn“%s”(typedefof).Name
请注意,在极少数
标签: F#
castingunits-of-measurement
是否有内置版本的类型转换函数可以保留单位,若并没有,我将如何制作它们?例如,对于这段代码,我如何将intWithSecondMeasure转换为浮点,而不丢失度量值或乘以1.0
[]类型s
设IntWithSecondMeasure=1
让justAFloat=以秒为单位浮动
我不认为有一种内置的方法可以做到这一点,但您可以轻松定义自己的单位保留转换函数:
let float_unit (x:int<'u>) : float<'u> = unbox float x
let
好的,所以我在做ProjectEuler问题14,我在摆弄优化,以便感觉f#out
在以下代码中:
let evenrule n = n / 2L
let oddrule n = 3L * n + 1L
let applyRule n =
if n % 2L = 0L then evenrule n
else oddrule n
let runRules n =
let rec loop a final =
if a = 1L then final
我写了一些代码来学习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
根据文档,表单的枚举类型约束
: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<
我已经安装了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#
pattern-matchingperfect-numbers
我目前正在试验F#。互联网上的文章很有帮助,但作为一名C#程序员,我有时会遇到一些情况,我认为我的解决方案会有所帮助,但没有或只是部分帮助
因此,我对F#(很可能还有编译器的工作原理)缺乏了解,这可能是我有时完全目瞪口呆的原因
例如,我编写了一个C#程序来确定完美数。它使用了欧几里德证明的已知形式,即梅森素数2p可以形成一个完美数−1(2p−1) (其中2p-1是素数,p表示为的幂)
由于F#的帮助说明“**”可以用来计算幂,但使用浮点,因此我尝试创建一个带有位移位运算符的简单函数(我认为定义P
下面的代码生成“t1 t2”。我想知道是否有人可以告诉我如何改变它,以便得到“t1 t2”。在t2中使用“override”而不是“member”是一个错误,我不明白为什么。我非常乐意使用RTFM,只要我知道在哪里以及在什么FM中查找
非常感谢,如果我错过了一些我想要的东西不可能实现的基本原因,我会感到抱歉
type myinterface =
abstract member doit : unit -> unit
type t1 () =
interface myinter
标签: F#
clrdsllinear-programmingclp
我所寻找的是一个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]
给定一个数字字符串,我希望有一个元组序列映射非零字符及其在字符串中的位置。例如:
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
问题:
我做错了什么?
更新:
这是我在调试模式下运行时所说的:
'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#
pattern-matchingdiscriminated-union
我的问题是受这个启发的:
下面是一个代码:
type A =
| X of int * int
| Y of string
let f (A.X(a, b)) = a + b
它可以工作,但有一个警告:
有道理;我没有你的对手
但是如果我加上一行
let f (A.Y(s)) = 10
然后我得到一个错误:
有没有一个很好的方法来修复它,并且仍然在函数参数中使用模式匹配?如果没有,那么为什么他们会创建这样奇怪的语法,总是导致警
假设我有以下代码:
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
我在浏览FSharp.Data的源代码时遇到了这行代码
let (|Singleton|) = function [l] -> l | _ -> failwith "Parameter mismatch"
函数[l]是我不理解的。更具体地说,我不理解[l]参数是如何工作的
通过在FSI中的实验,我可以确定它启动了一种模式匹配形式,类似于match[l]with…。但是,我无法理解F#编译器如何解释表达式
我想知道的是它实际上是如何工作的,它遵循什么规则。它相当于
let (|Sin
标签: F#
type-providersf#-data
在F#中,我有以下代码
[<Literal>]
let fname=fstFile.FullName.ToString()
type genomeFile = CsvProvider<fname>
如果没有实际的硬编码字符串,我似乎无法创建类型。有人知道如何解决这个问题吗?问题是[]只能应用于编译时已知的东西(例如“Hello”)
fstFile.FullName.ToString()的结果只有在运行时才知道
这种方法不起作用。CSV类型提供程序的参数必须是常量,以便在
标签: F#
computation-expressionquery-expressions
如何更改此查询表达式的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的问题。我在大学里修函数式编程这门课。在本课程中,我们使用F,我使用Xamarin作为我的编辑器
问题是,我们上了一堂关于尾部递归的课,这是一种提高效率的工具。但是当您无法编写函数尾部递归时,我们必须使用continuous,这样我们使用的是堆而不是堆栈
这在Mono3.10.0和F3.1上似乎不起作用,我得到一个System.StackOverflowException。这应该是不可能得到的,因为continuous应该使用堆
let rec fibC n c =
mat
我试图使用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
一个类Test,它在构造时创建另一个类的实例并设置一个属性,它看起来像这样(我想):
然而,我得到了一个块,这个“let”是未完成的。需要一个表达式。
执行此操作的正确和首选方法是什么?如果要更改Size属性,必须使用赋值运算符:
type Test() as this =
let a = new A()
do this.Init()
member this.Init() =
a.Size <- 10
错误是指哪一行?很好。谢谢C#语法有时很
在F#中,你能在函数签名上进行模式匹配吗。我想用一个函数来修饰一些函数,该函数度量函数的执行并调用statsd。我目前的职能是:
let WrapFunctionWithPrefix(metrics:Metric.Client.IRecorder, functionToWrap, prefix) =
let metricsIdentifier = (sprintf "%s.%s" prefix Environment.MachineName)
using (metrics.Sta
我在一个混合的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,
我来自C#,发现自己爱上了F#模式匹配语法,因为它比C#开关更简单,而且更有用。我喜欢尽可能多地使用它,以这种奇怪的方式使用它是否有性能或任何其他缺点
match 0 with
|_ when a<b -> a
|_ -> b
将0与
|_当一个
|_->b
在这个特定示例中,不会有性能损失。在其他情况下,很可能也不会出现性能损失,但要绝对确定,您必须使用类似ILSpy的工具查看生成的代码
我还必须补充一点,当你使用F#时,你会发现if/then/else也非常好。在C#中,
我有一个使用.NET4.5HttpClient的F#库。它编译得很好,但当我在脚本中加载函数后尝试调用库中的函数时,脚本会说它找不到System.Net.Http
脚本和库都位于同一个针对.NET4.5的项目中
库(在TdApi.fs中)执行此操作opensystem.Net.Http但是当脚本执行此操作时,加载“TdApi.fs”交互窗口中的错误是这TdApi.fs(6,17):错误FS0039:未定义命名空间“Http”。
我正在使用VS2012,并且刚刚开始使用F#。编译库和脚本文件之间有
标签: F#
web-testingcanopy-web-testing
您好,我的问题是如何通过weburl和actwindow最简单的方法,因为我的返回方法不起作用。我想调用函数Logovani传递到该函数varwindow,然后接收weburl和actwindow,所以最后我像这样修复了它
member x.Logovani(window : string) =
let weburl = ref ""
let actwindow = ref ""
"Login" &
我有以下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#函数的返回结果是否与预期的有差别的联合情况匹配。我正在使用NUnit创建测试,它不喜欢将区分的联合类型作为TestCase参数。以下测试用例未能编译:
[<TestCase("RF000123", Iccm.CallType.Request)>]
let ``callTypeFromCallNumber returns expected call type``
callNumber callType =
test <@ Iccm.callTypeF
标签: F#
printfpartial-applicationdebug-buildconditional-attribute
我将自己设置为创建一个跟踪函数,该函数的行为类似于sprintf或printfn,但通过使用
目前为止的结果:我认为这是不可能的。
问题的核心是,当您使用条件(“DEBUG”)属性时,函数必须返回单元结果。“正常”参数正常工作,并且方法被正确修饰(编辑:修饰,是的,但可转换成员不会被删除,请参见,必须改用元组形式):
这在不使用属性的情况下有效,但使用属性时,将引发:
此表达式应具有类型
单元
但是这里有类型
string->unit
错误特别在Trace.Trace“hello:%s”下面划线
标签: F#
type-providerscsharpcodeprovider
我正在尝试向正在使用的类型提供程序添加一个功能,以允许用户指定类型。由于类型提供程序不能提供泛型方法,因此唯一的方法似乎是引用具有该类型的程序集
我曾尝试使用Owin库中的类型对此进行概念验证,但在尝试使用提供的类型时遇到了一个问题:
它说它找不到文件,即使它显然存在,否则我正在使用的CSharpCodeProvider将给出一个错误(它以前对不正确的文件路径执行过此操作)。我尝试在一个单独的非类型提供项目中重现这个问题,但它在那里有效
此项目的代码如下(输入类型分支):
您可以通过打开主R
我只是想知道是否有更好的写作方式:
|> Seq.isEmpty |> not
比如:
|> not Seq.isEmpty
也许你喜欢
|> (not << Seq.isEmpty)
|>(不是我可能会同意你目前的观点。这取决于上下文-当这是某个更大功能的结果时,我认为以下几点看起来不错:
let someFunction () =
someData
|> Some pipeline
|> Seq.isEmpty
|>
标签: F#
64-bitstack-overflow32-bittail-recursion
起源于,我有一个小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
我正在将一系列记录从数据库表加载到deedle数据框中。是否可以累积(例如,对值进行累积求和)并返回数据帧?例如,有Series.scanValues,但没有Frame.scanValues。有Frame.map,但它没有达到我预期的效果,它保留了所有的值
#if INTERACTIVE
#r @"Fsharp.Charting"
#load @"..\..\Deedle.fsx"
#endif
open FSharp.Charting
open FSharp.Charting.ChartTy
我正在制作一个函数,它获取一个映射并生成所有可能的值交换
let mutations setup =
let setupList = setup |> Map.toList
[for x in 0..(setupList.Length-1) do
for y in x..(setupList.Length-1) do
yield (x, y)]
|> Seq.map (fun (x,y) ->
setupList
|> sw
我使用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
我在解决方案资源管理器中右键单击project,添加了Report.rpt和Report.fs文件。在Report.fs中,我声明了两种类型的Report()和CachedReport(),它们在C#中自动生成,并通过查看在C#WPF项目中生成的CrystalReport的.cs文件在其中添加了F代码。在Xaml中,我有
<ContentControl Content="{Binding ShowReport}"/>
<Button Command="{Binding View
我正在使用FSharp.Data库,如何指定以下选项:
LoadOptions.PreserveWhitespace
用加载法?我试着把它传进来,但编译器抱怨没有这样的重载
type Detailed = XmlProvider<"./samples/sample.xml">
let test = Detailed.Load(fi, LoadOptions.PreserveWhitespace)
type Detailed=XmlProvider
let test=Detaile
标签: F#
f#-interactivef#-3.0f#-dataf#-fake
我试图从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
标签: F#
asp.net-core-1.1fsharp.data.sqlclient
t我现在在。是否有一种从F#执行此操作的首选方法。您可以使用JsonProvider解析app settings.json文件类型设置=JsonProvider。这将为您提供对结构的键入访问权限。我如何优雅地使用这个解决方案。我试图避免将文本连接字符串传递给每个查询函数。我知道必须有一种方法从F#访问运行时连接字符串。这就是我在转到asp.net core并遇到此问题之前通过web配置所做的。如何从我的F#项目中正确定位appsettigs.json文件,以供开发和生产使用。不知何故,这一切现在
我是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“%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
我想确认一只动物是否是人,它的名字是亚历克斯
个人对象:
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" ->
给定一个包含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
如果我有一个接口:
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#
computation-expression
我希望构建一个计算表达式,其中可以表达以下内容:
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
嗨,我有个问题
我有一个简单的服务器,看起来像:
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#中的singelton创建某种中介。主要原因是我需要在应用程序的一个部分注册一些操作,然后在另一个类似于c#的部分执行它,如下所示:
public class Mediator
{
private static readonly object syncRoot = new object();
private static Mediator instance;
public static Mediator Instance
{
我有一个DotnetCore3.1项目,其中nuget引用了SQLProvider,试图将目标锁定在MariaDB服务器上。
我已经添加了社区制作的包MySqlConnector。我的F#代码是
我已将文件“MySqlConnector.dll”;”System.Data.Odbc.dll“;”文件夹“dll”中的System.Data.SqlClient.dll。建议将此作为来自的修复
我已尝试安装错误中提到的每个程序集。似乎无法让它工作
编辑
这是我的fsproj代码片段
<ItemG
我指定了一个自定义类型,它接受两个浮点并使它们成为一对(复数):
makeComplex函数的类型是float->float->complex,这是完全正确的。但是,我想创建一个函数,它采用复杂类型,并使其成为普通对。
这是我尝试过的功能:
let complexToPair ((x,y):complex) = (x,y);;
但是结果类型是float*float->float*float,而实际上它应该是复杂->float*float。我是否对((x,y):complex)部分使用了错误的
标签: F#
tcpclienttcplistener
我正在尝试设置服务器/客户机,目前我正在做一个echo服务器,以确保与侦听器和客户机的连接正常
但是我遇到了一个问题,当试图从一个简单的客户端向我的服务器发送数据时,它没有得到发送,或者在我强制关闭终端中的客户端后它得到发送
我以前用C写过一个服务器/客户端应用程序,但现在我正在用F#尝试
客户端代码:
let Client (ip :IPAddress, port) =
use client = new TcpClient(ip.ToString(), port)
use read
标签: F#
Akka
akka.netakka-remote-actorakka-remoting
有人知道为什么会出现关联错误吗
我有一个服务器和客户端系统,客户端的参与者通过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 页