我在hubFS上找到了,但它处理基于单个元素的拆分条件。我希望根据相邻元素的比较进行拆分,因此类型如下所示:
val split = ('T -> 'T -> bool) -> 'T list -> 'T list list
目前,我正试图从Don的命令式解决方案开始,但我不知道如何初始化并使用“prev”值进行比较。折叠是更好的方式吗
//Don's solution for single criteria, copied from hubFS
let Sequenc
我正在尝试将System.Data.Sqlite与F#一起使用。在C#中,我有如下代码
using (DbTransaction dbTrans = con.BeginTransaction()) {
using (SQLiteCommand cmd = con.CreateCommand()) {
//blahblah
}
dbTrans.Commit();
}
但是在F#中,当我使用上面使用的类似的两个时,我得到的错误是类型bool与类型
我有一个返回元组的函数:
let rec pack l =
let combine = List.fold packFunction (' ',[], []) l
match combine with
| (_,b,a) -> b::a |> List.rev |> List.tail
有没有一种方法可以在不使用匹配语句的情况下提取元组的某些部分
也就是说,我想在不使用
有两个F#的片段我想理解,但不知道用谷歌搜索什么。第一:
let ``1+2`` () = ....
我猜这只是指“将表达式转换为标识符”?但是,如果我想引用它,该特性叫什么
第二,当字符出现在类型中时,^是什么意思?我发现有几处提到过它,但解释总是说“类型就是这个”,而不是“它与没有1^1的类型的区别在于……”。例如:
let inline blah x y = x+y;;
val inline blah :
^a -> ^b -> ^c
when ( ^a
假设我有以下代码:
let a = ref 4.
printfn "1) a = %g" !a
let t1 = System.Threading.Thread (fun () ->
lock a (fun () ->
printfn "locked"
System.Threading.Thread.Sleep 1000
printfn "unlocked") )
t1.Start()
System.Threading.Thread.Sleep 10
标签: F#
matlab-deploymentf#-interactive
我使用生成了一个.Net库。我设法在C#中毫无问题地使用了它,但我现在正尝试使用我在F#Interactive中创建的快速F#包装器进行一些测试
问题是,我似乎无法在F#Interactive中使用MWArray类
我设法使用#r命令引用DLL,但在打开命令后使用intellisense时,我找不到MathWorks域
此外,如果我运行代码,当流遇到MWArray时,会出现以下错误:
将会话绑定到“C:\Program Files\mypath\bin\Debug\MWArray.dll”
接
我对F#中的正则表达式还有一个问题:
let tagName=“div”
让ptnTagNotClose=“|\s+[^>]*>)[^]*>)[^我不认为调试输出意味着您认为它的功能;使用逐字字符串(如“|\s+[^>]*>)[^在这一点上,我不得不指出,人们通常认为使用正则表达式解析HTML或XML。标记名可以更改的事实与逐字字符串文字有什么关系?这些是完全正交的问题……嗨,据我所知,使用正则表达式,人们可以提取一些有用的信息从HTML获取信息。对于格式良好的XML,不需要使用正则表达式,因为
是否可以“扩展”F#编译器以执行自定义编译时字符串检查?在使用sprintf等时,我正在考虑类似于对StringFormat字符串的检查。当我说“扩展”时,我不是指构建编译器的自定义版本,而是指使用现有支持的技术
在我脑海中,你可能有一个RegexFormat类型。您提供了正则表达式,编译器将使用正则表达式进行静态分析。例如
//Setup RegexFormat with IP address regex and type abbreviation IpRegexFormat?
//Compi
在阅读Websharper online示例时,我遇到了如下示例:
Div [Attr.Style "padding: 5px;"] -< [
P [Text "Type a name in the input field below:"]
Form [
label "First Name: "
input
|>! OnKeyUp (fun _ _ -> update ())
]
P [
我正在用F#编写一个PCL,并且我正在尝试将一些东西写入磁盘。所有的PCL示例都在VB.NET和C中,而这些示例在F中不起作用。具体而言,我有以下代码:
type FileSystemStockProvider(filePath:string) =
member this.PutData(stockData) =
let serializedData = stockData
|> Seq.map(fu
我有这个C代码
公共接口存储库:IRepository
{
IQueryable FindByLocation(浮动纬度、浮动经度);
IQueryable FindUpcomingDinners();
IQueryable FindInnerSbyText(字符串q);
无效删除RSVP(RSVP RSVP);
}
及
公共接口IRepository
{
IQueryable所有{get;}
可计量的所有包括(参数表达式[]包括属性);
T Find(int-id);
无效插入更新(T晚餐)
我知道当我看到这个答案时我会笑,但不知为什么我看不到它
由于某些原因,我无法在一个参数中传递多个func(因为缺少更好的词语)
例如,假设我有一个IDoSomething,它有3种方法:
1.) DoIt()
2.) DoItMore()
3.) DoItMost()
在OO中,我会这样做:
type MyController(something:IDoSomething) =
let a = something.DoIt()
let b = something.DoItMo
因此,我正在使用HttpRuntime.cache,它返回一个IDictionaryEnumerator作为其“枚举器”,它似乎与List或Seq不兼容,因此我能找到的唯一使用它的方法是下拉到不神圣的命令代码中,如下所示:
member this.GetCountStartsWith keyPrefix =
let enumerator = HttpRuntime.Cache.GetEnumerator()
le
我很难合并地图。请用一系列键删除
例如,如果我有
let z : Map<int, Set<int>> = Map.ofList [(1, set []); (3, set [3; 4]); (4, set [])]
这给了我
[1; 4]
这正是我所期待的。但是现在,如果我想从映射中删除那些键、值对,我能想到的唯一方法是将原始映射转换为如下列表:
z
|> Map.toList
|> List.filter (fun (k, s) -> not (
在F#中,继承不如在C#中常见,但这并不意味着它从未被使用过
如果我继承的类型在C#中实现了IDisposable,我通常会使用来抑制终结器。但是,我不能在F#中直接这样做,因为没有受保护的访问修饰符
我在网上搜索了F#中Dispose模式的实现,但只找到了对Dispose()的简单解释。是否有一种模式允许我在派生类中释放非托管资源,同时仍然抑制终结器以优化性能
为了使这个问题稍微不那么抽象,下面是一个我想继承的典型抽象基类型:
[<AbstractClass>]
type Cont
在“问题”窗口中获取此内部错误并自动完成不起作用
file: 'file:///startup'
severity: 'Error'
message: 'internal error: BuildFrameworkTcImports: no resolution of 'FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a''
at: '1,1'
source:
我需要帮助将IndexOfAny的自定义扩展转换为string,因为现有框架没有匹配字符串值的IndexOfAny。已经翻译了我自己的。然而,我不知道如何通过返回值打破循环。任何想法如何打破循环或更好的解决方案。
下面是我的翻译
C#
F#
[]
静态成员public indexofanysharp(str:string,anyOff:string[])=
将str null和anyOff null与匹配
|正确->
设可变索引=-1
对于anyOff do中的值
如果索引=-1,则
索引-1
我在f#项目中对继承的一个微不足道的使用上遇到了麻烦
文件1:
namespace MercurySchool.Models
[<AbstractClass>]
type Resource() =
abstract member Href: string with get, set
abstract member Method: string with get, set
abstract member Relations: string[] w
标签: F#
f#-interactivec#-to-f#f#-data
因此,我将此作为脚本:
#r @"..\packages\FSharp.Data.2.4.2\lib\net45\FSharp.Data.dll"
#r "System.Xml.Linq.dll"
open FSharp.Data
// provide some URL, file path, or raw JSON sample
// that can be used at compile time to generate types
type Json = JsonProvider<
标签: F#
json.netlazy-evaluation
考虑下面的代码,它使用FSharp.Data从web资源请求数据
let resp = Http.RequestStream(url, headers, query)
use rdr = new StreamReader(resp.ResponseStream)
use jrdr = new JsonTextReader(rdr)
let serializer = new JsonSerializer()
let myArray = serializer.Deserialize<someT
标签: F#
initializationxunit
接下来是另一个问题:下面的示例显示,当运行开户时…testid和contact未初始化
如果有函数返回相同的值并在测试体中调用,那么它也可以工作
我想知道为什么会出现这种情况,如果有什么我可以做的,让这些变量在测试运行时正确初始化
let id=Guid.Empty
让联系人={
姓名={
FirstName=“Marcel”
初始值=无
LastName=“Patulacci”
}
DateOfBith=新的日期时间(1850,12,25)
地址={
Address1=“41 av 8 Mai
我有一个使用NLog的项目,记录器周围有一个包装器,以便在某些区域关闭日志记录:
member this.SetQuiet q = quiet <- q
member this.Trace format = Printf.kprintf (fun s -> if not quiet then logger.Trace(s)) format
member this.Debug format = Printf.kprintf (fun s -> if not quiet then
我有一堆模块导出IModule接口。所以在主程序中我没有问题
...
let mutable modules = Seq.empty
[<ImportMany>]
member x.Modules
with get():IEnumerable<Lazy<IModule, IModuleData>> = modules
and set(a) = modules <- a
...
。。。
设可变模块=Seq.empty
[]
成员十.模块
我想把RX的一些C代码转换成F代码。
以下是C#代码:
Stream inputStream=Console.OpenStandardInput();
var read=可观察的。从异步模式
(inputStream.BeginRead、inputStream.EndRead);
字节[]someBytes=新字节[10];
IObservable source=读取(一些字节,0,10);
IDisposable subscription=source.subscripte(
x=>Conso
标签: F#
strong-typingtype-providers
我不知道如何通过类型提供程序提供强类型类型。
因此,我看到的所有示例都具有相同的类型,与输入无关
MiniCsvTypeProvider仅提供双精度。
RegexTypeProvider仅提供匹配项
是否可以根据提供给类型提供程序的参数提供不同类型的属性
if somevariable then
proptype = typeof<int>
else
proptype = typeof<string>
let s
在将OCaml转换为F#的过程中,我发现我需要详细了解初始化过程。对于F#这在F#规范的一节中进行了解释。虽然页面列出了一些好的文档,但我找不到任何与F#规范中给出的详细程度相同的文档
是否有任何文档为OCaml初始化提供了相应的详细级别?我无法提供有关OCaml模块初始化的任何信息,但作为我项目的一部分,我将格式模块移植到了F#。如果您想看一看,可以在这里找到:
简而言之,是否有类似于F#的OCaml规范手册?没有
我今天花了一个小时找,但还是找不到。我目瞪口呆,查看了一些OCaml邮件列表,
WebSharper看起来很有趣,Mono3.0刚刚推出了F#3.0。显然xbuild可以构建一些MSBuild项目。在mono上构建WebSharper克隆的直接尝试失败了,因为FSharpHome还不清楚。什么是定义它和其他需要进一步尝试的内容的好方法?“因为FSharpHome不清楚而失败”?你的意思更不清楚了,请复制并粘贴这个该死的错误:)
在用函数式语言编写记忆化和延续传递样式(CPS)函数的示例时,我最终使用了斐波那契示例。然而,Fibonacci并没有真正从CPS中受益,因为循环仍然必须以指数形式频繁运行,而对于记忆化,第一次只有O(n),接下来每次只有O(1)
将CPS和记忆结合起来对斐波那契有一点好处,但有没有关于CPS是防止堆栈耗尽和提高性能的最佳方法的例子,以及记忆不是解决方案的例子
或者:对于何时选择其中一个或两者都有指导原则吗?CPS的一个好处是错误处理。如果需要失败,只需调用失败方法
我认为最大的情况是当你不谈论
我需要一些公共财产,在C#中,我会这样做
public VendorOrderService { get; set; }
F#中此类属性的最短(正确/惯用)语法是什么
member val VendorService=Unchecked.defaultof with get,set
顺便说一句,我确实理解公共财产对于F#来说并不是非常惯用的。但是这段代码在更大的.NET项目中工作,因此这些属性是必须的。首先在C中,您应该像这样编写类型
type Foo() =
member val
Seq.append的复杂性是什么?是时间和空间吗
我可以补充一点:(a)我当然希望如此,(b)我没有用谷歌搜索到Seq模块成员的复杂性边界。如果有人知道这一点,我很想有一个链接到它
编辑。在询问之前,我确实检查了源代码。实现是,这将使您最终看到,我无法立即访问的实现,以及之前困扰我的评论 是的,它是O(1),因为它基本上只是创建一个新对象来封装两个原始序列
参见《源代码》,也就是说,如果您创建一个封装两个原始序列的新对象,然后继续重复创建一个大序列,那么实际上迭代生成的franken序列不会执
我有一个3元组序列,如下所示:
[(123, 143 ,136), (177, 284, 248), (143, 182, 252)...]
我想通过对所有3元组求和,将它们转换成单个3元组:
[((x1+x2+x3),(y1+y2+y3),(z1+z2+z3))]
> let sumRGB (r1,g1,b1) (r2,g2,b2) = (r1+r2, g1+g2, b1+b2);;
val sumRGB :
r1:int * g1:int * b1:int -> r2:
我正在WinRT 8.1应用程序的F#项目中尝试使用Lex.Db数据库
我跟随C#。我成功地将对Lex.Db的引用添加到了一个F#项目中,教程中的简单调用被转换为F#并编译(例如,let Db=new DbInstance(“demo”))
问题在于C代码:
这会在idExpr上产生编译器错误:
类型不匹配。需要一个表达式>?Microsoft.FSharp.Linq.QuotationEvaluation在PowerPack中,但从v3.0开始,它提供的功能在Core中通过LeafExpres
我有一个简单的温度转换器类,我正在努力工作
open System
type Converter() =
member this.FtoC (f : float) = (5/9) * (f - 32.0)
member this.CtoF(c : float) = (9/5) * c + 32.0
let conv = Converter()
54.0 |> conv.FtoC |> printfn "54 F to C: %A"
32.0 |> conv.
我正在使用NUnit测试技术,该技术在尚未出版的《F深海潜水版本12秒》一书中提出。2.2添加测试
下面的代码执行精细编译或与MEMOIZE defined/undefined交互。但是,从GUI NUnit执行单元测试在未定义MEMOIZE的情况下可以正常工作,但在定义MEMOIZE时会出现空引用异常而失败。注意记忆使用闭包。我怀疑发生异常是因为编译器生成的某些初始化代码在NUnit启动时没有执行。你觉得怎么样
open System
open System.Collections.Gener
是否可以检查函数是否声明为递归函数,即使用let rec
我有一个memoize函数,但它不适用于任意递归函数。如果用户使用这样的函数调用它,我想给出一个错误。(请随时告诉我这是否是处理F#中错误的糟糕方法)F#代码被编译为.NET公共中间语言。F#rec关键字只是对F#编译器的一个提示,它使正在定义的标识符在函数范围内可用。因此,我认为在运行时无法确定函数是否声明为递归函数
但是,您可以使用System.Diagnostic.StackTraceclass()在运行时获取和分析堆栈帧。但是访问
我只是没有得到F
具体而言,我无法进入以下代码:
let count = hand |> getHandCount
就像整行代码在调试器中被忽略一样
以下是测试:
[<Test>]
let ``get card count`` () =
let hand, deckRemaining = deal (shuffle deck)
let count = hand |> getHandCount
count |> should be (gr
如何在F#中注册和实现.Net事件的事件处理程序
我回顾了这篇文章,但似乎有点冗长
例如:
namespace Core
open Lego.Ev3.Core
open Lego.Ev3.Desktop
type LegoExample() =
let _brick = Brick(BluetoothCommunication("COM3"))
_brick.Changed += OnBrickChanged
let OnBrickChanged =
如何使用xml类型提供程序获取xml样式表
let xml = XmlProvider<"""<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type='text/xsl' href='/stylesheets/application_internet.xsl'?>
<application>......</application>""").GetSample()
l
标签: F#
constraintstype-parameter
使用F#,我得到了以下(简化的)结果,效果很好:
type MyInt =
struct
val Value: int
new v = { Value = v }
end
static member inline name() = "my_int" // relevant line
let inline getName (tp: ^a): string = (^a: (static member name : unit ->
我不知道如何在f#中创建路由器角色。而f#Api页面也没有提供太多帮助。非常感谢任何示例代码。一种方法是通过定义路由器-这对于C和F版本都是一样的
如果使用Akka.FSharp插件,您可以通过编程方式定义路由器:let-actorRef=spawnOpt-system-actorName-actorBehavior[router(routerConfig)]
对于插件,您可以像这样定义它:让actorRef=spawn系统actorName{props(actorBehavior)with R
我无法让引用私人程序集工作。我已经阅读了文档,但仍然失败,并显示错误消息:
2016-09-29T19:43:08.615 startup(2,1): error FS82: Could not resolve this reference. Could not locate the assembly "Backend.dll". Check to make sure the assembly exists on disk. If this reference is required by yo
我对F#有点陌生,正在尝试一个简单的计算器应用程序。我从用户那里获取输入,并希望根据输入执行特定的功能。
现在,每当我从用户获取任何输入时,程序都会从上到下执行。我希望它只执行与输入匹配的特定函数。若输入为6,则应执行scientificFun()的主体。现在它执行所有函数。请帮帮我,我在这件事上卡住了!
代码是
open System
let mutable ok = true
while ok do
Console.WriteLine("Choose a operation:\n1
有没有更好的方法在F#中建模数据以避免需要它?在F#中,protected修饰符可能会有很大的问题,因为您经常需要从lambda表达式调用成员。但是,当您这样做时,您不再从类中访问该方法。在使用C#中声明的受保护成员时,这也会导致混淆(请参见示例)。如果您可以声明一个受保护的成员,那么下面的代码可能会令人惊讶:
type Base() =
protected member x.Test(a) = a > 10
type Inherited() =
inherit Base()
我使用yofsharp生成器创建了一个独立的console应用程序。关于此特定问题的github回购协议如下:
我想构建并运行一些基本的FsCheck.Xunit测试。我知道我需要在FAKE的build.fsx中添加一些目标,但由于我对.net和C/F生态系统非常陌生,我不知道该怎么做
false示例页面中的示例如下:
// define test dlls
let testDlls = !! (testDir + "/Test.*.dll")
Target "xUnitTest" (fun
我目前正在尝试编写一个程序,它能够获取一个txt文件,并将该文件中的数字表转换为第1列中的数字列表,第2列中的另一个列表,等等
由于txt文件的结构,我从数字列表中没有问题,问题是如何从txt文件创建的字符串中删除不相关的部分
我现在的代码是:
let mutable s = ""
let readerStream = System.IO.File.OpenText "x.txt"
let readFile (stream : System.IO.StreamReader) =
whi
如何处理JSON文件中丢失的数据?对于数据列表,您可以简单地使用映射函数。但是物体呢
假设我有样本数据:
{
"Person":{
"FirstName":"John",
"LastName":"Doe",
"Age": 42,
"Address": {
"Street": "SomeStreet",
"City" : "Some City"
}
}
}
我的实际数据如下所示:
{
"Pe
我按照中的smoothdeveloper的回答中的说明进行操作,现在我的解决方案中有了所有三个Paket目录。但是,我无法从命令行或VS 2017添加包
我试图从命令行添加XUnit。paket.dependencies文件中出现了一行带有nuget xunit的代码。但是,paket.references文件中没有xunit行。如果我在编辑器中将open XUnit或任何变体(Intellisense没有显示任何以xu开头的内容)添加到我的代码中,我会得到一条红色的曲线
因此,我尝试从解决方案
我经常使用CSV类型提供程序,它对所有底层数据使用元组。我的问题是,我遇到了有很多列的csv文件,发现围绕处理这种大小的数据构建基础设施相当麻烦。如何构建一个只更新特定列子集的函数,而不必创建庞大的模式匹配语句?请参见下面的代码示例
// I want to generate lots of sample data for the first three columns
// And I would like to avoid creating giant record types in ord
我有一个复杂的例子,但我使用简单的obejct简化了这个例子
给定2个函数:
让我们加上(a:int)b=a+b
设aee(a:int[])b=a[0]+b
它们可以这样使用:
让c=加15
设a=[1;2]
设d=aee a 5
那么,为什么这是有效的:
让c=1 |>加5
这不是吗
let d=[| 1;2 |]|>aee 5//类型不匹配,应为int[]->`a,但给定int->int
我的真实情况是,如果这很重要,如下所示:
打开FSUnit
键入记号(符号:字符串,询问:十进制
有没有一种方法可以显式地定义新操作符的元素
我检查了文件,但找不到:
假设我已经定义了以下xor操作符:
let (^@) a b =
a <> b
let result = true ^@ false
let(^@)a b=
a b
让结果=true^@false
它工作正常,但以下定义没有
let (@^) (a: bool, b:bool) : bool =
a <> b
let(@^)(a:bool,b:bool):bool=
a b
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 201 页