我注意到其中包含>>操作符的一些代码:
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
我希望表达式(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#代码访问Xaml控件
let (?) (source:obj) (s:string) =
match source with
| :? ResourceDictionary as r -> r.[s] :?> 'T
| :? Control as source ->
match source.FindName(s) with
| null -> invalidOp (sprintf "dyn
标签: F#
comparisonequalitymutableinference
通用的相等/比较成员设计准则是不在可变引用类型上实现结构相等,而是查看具有可变字段的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
我已经开始在Mac上使用MonoDevelop for F#了。它很酷,只是它经常崩溃。困扰我的一件事是,我无法更改项目中F#源文件的顺序。这可能吗?如果不是这样的话,组织项目就有点像噩梦了。是的,你可以对文件重新排序。在“项目选项”(project options)中(在“生成”选项卡下)有一个用于执行此操作的特殊选项卡
不幸的是,使用文件浏览器无法做到这一点(因为MonoDevelop会自动按文件名对文件进行排序,并且无法禁用它)。如果您使用的是MonoDevelop 4.x和最新版本的F#
有没有办法从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#度量单位的概念非常吸引人。然而,通常情况下,一些单位有他们居住的特定领域。例如,距离是一个正数,温度大于开尔文零,概率介于0和1之间,等等-但我没有看到任何内置的东西来表示这个概念,并验证特定值是否是特定单位的有效度量。度量单位是否支持这样的行为(我不这么认为),如果不支持,有没有推荐的方法来实现这种行为?F#中的度量单位不支持行为。它们是编译期间用于抛出类型错误的静态机制。您需要一个对象来封装任何“行为”。例如,您可以创建一个类型Temperature,为绑定检查提供操作符。如果您传
标签: F#
function-composition
我很好奇为什么会这样
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类型的参数来调用它,而这些参数不能像这
我在下面的代码中得到了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-cetype-providers
我正在尝试从F#连接到SQL Server Compact Edition数据库,并尝试使用类型提供程序。这是在VisualStudio11测试版中,所以我意识到可能会因此产生问题,但我认为更可能的是我还没有这方面的知识
但是,我注意到Microsoft.FSharp.Data.TypeProviders中没有特定于CE的类型提供程序,并且我不确定常规的SqlDataConnection是否会起作用,因此这可能就是问题所在
然而,当我尝试创建连接时,IDE似乎意识到我正在尝试访问CE数据库,至少
我有一些脚本文件setup.fsx的功能
我想测试一下。
xUnit等需要测试的功能才能成为程序集的一部分
因此,我考虑将脚本从setup.fsx重命名为setup.fs扩展名,然后从另一个脚本文件加载它。但我的剧本取决于
#r "System.Xml"
#r "System.Xml.Linq"
然后我必须在调用脚本中远离依赖关系实际产生的地方指定它
在xUnit工作流中是否有基于脚本的集成测试?
建议哪个组织编写脚本文件的测试
可能我们需要一个visual studio扩展,用于在脚本中而不
当项目包含在列表中时,有一个查询要搜索,但当项目不包含在列表中时,没有查询
此查询查找给定列表中没有ContactNum的customer对象。我该怎么做才能仅返回此列表中没有ContactNum的客户
let q =
query {
for c in dc.Customers do
where (query { for n in cdiffnums do contains c.ContactNum })
select c
}
我
在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
我在获取具有类型约束的接口以使其正常工作时遇到问题
这是类型
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#
array-initialization
F#
C#
Object[]newItemArray=新对象[items.Count];
Parallel.For(0,items.Count,index=>
{
/*这里有复杂的东西*/
newItemArray[索引]=新对象();
});
我让上面的C和F做同样的事情。没有并行的。对于,F#稍微快一点。与并行。对于而言,C#需要一半的时间来执行。如何正确地将F并行化以获得与C相同的性能提升
到目前为止,我尝试的方法是Array.Parallel.Iteri,因此我可以将相同的索引用于我在
标签: F#
computation-expressionquery-expressions
我一直在看这里的查询表达式
我一直在想为什么下面的说法是合法的
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#数组模块中进行了研究,但似乎没有任何函数可以从数组中删除某个元素。我只是想知道是否存在这样的函数
例如
更新
数组过滤器是我要找的。除此之外,对我的情况要具体一点
如果我拥有的数组不是普通类型数组,而是特定于类的引用数组。假设我只想删除member.order=2的元素,那么谓词是什么 您可以使用F#数组模块功能实现此功能,如下所示:
> [| 0 ; 1 ; 2 ; 3 ; 4 |] |> Array.filter ((<>)2);;
val it : int
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#
tail-recursionfslex
我正在用fslex/fsyacc实现一种脚本语言,但在大用户输入(即>1k个脚本)时遇到问题,特别是当lexer分析一个非常大的字符串时,会发生此错误
我在自定义lexer函数中扫描字符串(允许用户用反斜杠转义引号之类的字符)。下面是函数:
and myText pos builder = parse
| '\\' escapable { let char = lexbuf.LexemeChar(1)
我有一张表格,上面有计算数据和图表,大约是纸张大小的A4格式。这使得CopyFromScreen方法无法截屏整个表单。更改屏幕分辨率不是一个好主意,因为该程序应该可以在多台计算机上运行。在下面的代码中,您会发现两个captureScreen函数,其中只有一个应该使用,但没有一个可以打印整个表单。只有我报告的上半部分打印到图像上。有什么建议吗
open System.IO
open System.Drawing
open System.Windows.Forms
open System.Drawi
标签: F#
pipelinepipelining
我有点谷歌,但我还没有找到我要找的东西。正如所料。我的问题是,是否可以定义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 +
使用app.config文件中的连接字符串名称时,定义SqlDataConnection类型提供程序的语法是什么。我有一个包含两个项目的解决方案。主项目是MVC5项目,第二个是F#项目。在f#项目中,我定义了一个带有数据库连接字符串的app.config文件,并将我的SqlDataConnection定义为:
SqlDataConnection<ConnectionStringName="dbname", ConfigFile="app.config">
SqlDataConnec
在将csv加载到Deedle数据结构中时,是否可以指定一个自定义值来表示null或NaN?在Python中,这是一个可配置的列表选项
通常,csv的输入数据将包含一些表示null的任意值,而列的其余部分则具有有效的值double type。目前,我必须将它们全部加载,然后将一个函数应用到tryparse double列
谢谢
casbby这目前不受支持,但我同意这将非常有用!我创建了一个
我们肯定会在某个时候添加它,但如果您想贡献并添加对指定自定义缺失值的支持,这实际上相当容易。Deedle使用
我知道这不是你典型的编程问题,但它困扰着我
我刚刚在两台Windows8.1机器上安装了F#3.1.1捆绑包:一台32位,另一台64位
我有几个用于工作的F#脚本(.fsx文件),当我在32位系统中右键单击该文件时,它如下所示:
另一方面,在64位系统中,它看起来是这样的:
您可能会注意到“使用F#Interactive运行…”菜单项缺失,图标不同。我已经试过修理包裹了,没用。如何将上下文菜单项输入64位Windows资源管理器?这两个系统都是新安装的
我希望答案不会涉及一些可怕的注册表黑客
我到处都找遍了,我似乎是这个星球上唯一一个想这样做的人。我已经尝试了所有常用的方法,制作filetypes.Fs.conf、filetypes.Fs、编辑配置,你都做了些什么。它总是认为.fs是Forth,我无法阻止它,即使删除Geany中的Forth文件或删除syntax config中的Forth部分也无法阻止它。此外,我无法让F#出现在语言列表中。如果有帮助的话,我正在使用Windows 7。指向页面,这是关于扩展Geany的页面,用于添加对其他语言的支持 你能澄清一下你的问题是什么吗?对
这是我在F中的代码,我使用的是MonoBrickFirmware.dll库。为了得到Button的值,我试图定义buts
但它不起作用,我仍然无法将Button的值设置为十六进制或其他类型。按钮事件在F中以以下方式工作,您只需将代码复制到新创建的F控制台应用程序中的Program.fs文件中即可:
let buts: ButtonEvents = new ButtonEvents()
let event =
mat
我正在尝试一些大量使用printfn的示例。我创建了一个控制台应用程序,但所有函数都会打印输出,无论我是否调用它们。我相信我的错误背后是热切的评价。这是我的密码:
TextFormat.fs:
module TextFormat
let printPi =
let pi = System.Math.PI
printfn "float: %f, exponent: %e, compact: %g" pi pi pi
let petabyt
我有一个关于选举数据的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
因此,我想将前三名按原样排列,并将所有其他人相加,作为新的一行。最好的方法是什么?
我正在尝试实现下面第四行中的自动/动态转换:
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实现了二分法,然后想学习如何使用匹配
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
在C#中,我们可以为属性声明私有setter。
如何使用F#实现这一点
具体来说,如何确保只能从类内更改属性的状态
例如,如何将FirstName setter属性声明为private,如在C#中
public string FirstName{get;private set;}
键入SomeViewModel()=
继承ViewModel()
让可变名字=“”
让可变lastName=“”
请记住这个名字
使用get()=firstName
和设置(值)=
firstName成员this.f
我试图使用System.IO.DeleteFile删除一个文件,但它莫名其妙地抛出了UnauthorizedAccessException。我意识到这已经被问过很多次了。我已经看过了所有我能找到的问题,但没有一个答案是适用的。我碰巧用的是假的,但问题似乎更一般
以下是我的整个build.fsx:
// include Fake lib
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake
open System.IO
Target "Default"
标签: F#
Yaml
fsharp.data.typeproviders
我已尝试在配置文件中使用Yaml贴图集合:
Companies:
- code: 11
name: A
country: FR
functionalCurrency: EUR
- code: 12
name: B
country: GB
functionalCurrency: GBP
但是,当尝试使用类型提供程序读取它时,它只会找到列表的第一个结果
与:
open FSharp.Configuration
type Compani
让类型表示函数有什么好处
例如,我观察到以下片段:
type Soldier = Soldier of PieceProperties
type King = King of PieceProperties
type Crown = Soldier -> King
它只是为了在其他参数尚未满足时支持部分应用吗?正如Fyodor Soikin在评论中所说的那样
和你给其他东西命名的原因一样-值,函数,
模块等
换句话说,想想在汇编中通常不使用类型的编程(是的,我知道),以及人们可
什么时候应该在函数中使用函数,而不是单独的私有函数
我发现我编写的函数相当长:
let optionsFor piece (positions:Space list) =
let yDirection = match piece with
| Black _ -> -1
| Red _ -> 1
let sourceX , sourceY =
match p
这是我第一次尝试F#,我知道我仍然需要阅读很多,我会的,但是这些挑战帮助我更好地理解接下来的部分,到目前为止,我已经解决了一些最初的挑战,所以请耐心等待
xml文档如下所示:
<BuildCollection xmlns="http://schemas.datacontract.org/2004/07/BuildModels" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
...
<PostEvents
我在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#
lazy-evaluationlazy-sequences
当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
我有这样一个受歧视的联合树:
type rbtree =
| LeafB of int
| LeafR of int
| Node of int*rbtree*rbtree
internal static a tail@13<a>(FSharpList<int> results, FSharpFunc<FSharpList<int>, a> continuation, Program.rbtree tree)
{
wh
我的paket.dependencies文件中有一个TFS git存储库:
吉特
在该存储库中,有一个文件“src/Tools.fs”
在paket.references文件中,我如何告诉paket向该git存储库中的文件添加引用,以便paket可以将其添加到fsproj文件中?paket目前似乎不支持这一点。GitHub有单文件依赖项功能,但一般git依赖项的处理方式不同
不过,您可以半手动实现同样的效果。GitHub的工作方式是将引用文件添加为项目的链接。只要您在paket.dependen
有没有一种简单的方法来展平矩阵
// 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#中逗号后得到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
我有一些化学模型,它们基于一些系数的稀疏矩阵。因此,给定模型参数,我仅基于这些系数的非零元素生成F#代码。然后将生成的模型反馈给ALGLIB()ODE解算器。系数矩阵约为99.9%至99.99%稀疏,这意味着只有0.01%至0.1%的系数不是精确的零。下面是一个非常简化的示例,演示了生成的F#模型文件的外观。使用64位FSI将函数update(x:array):array馈送给ALGLIB ODE解算器
现在,ALGLIB ODE解算器完全能够为一个简单的输入函数处理至少1M个变量。我已经测试过
我有一个关于设计和使用结果的快速问题。
我已经阅读了关于的优秀文章,它实际上符合我的需要,因为我需要访问数据库中的数据,而一些数据可能不可用(因此会产生错误)
假设我有以下域
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 =
尝试获取我尝试将let更改为member和static member,但这会产生错误
错误FS0010定义中出现意外关键字“member”。在此点或其他标记处或之前应为不完整的结构化构造
OK语法:
糟糕的语法
您不能将模块中的成员定义为状态吗
成员是属于类型定义[…]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
我将一些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此表
我有一些代码包装TA库,很多包装都非常相似:
let sma (timePeriod: int) (data: float[]) =
let mutable outStartIndex = 0
let mutable outNbElement = 0
let mutable smaData : float array = Array.zeroCreate (data.Length - timePeriod + 1)
let retCode = Core.Sma
(新手问题)
我一直在努力用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 页