我正在尝试lex javascript正则表达式文本。它们以“/”开头,以“/”结尾(有时还有其他一些修饰语)。问题是确定它是否是正则表达式而不是除法运算符的唯一方法是读取“/”字符前面的标记
关于这一点,我们可以多读一点
事实上,我找不到任何关于如何获取上一个令牌的文档。希望这是可能的,有人能告诉我怎么做
谢谢。据我所知,没有办法获得之前的令牌(但我还没有尝试过,我很久以前就使用过FSLex)。我想您可以保留一个参数来指定最后处理的令牌,然后使用它来决定在找到“/”字符时要做什么
无论如何,您
我试着做一个“展开”-(我想),从一个初始值开始,对它重复应用一些函数,然后得到一个序列作为结果
在本例中,我尝试从1.0开始,乘以.80,然后执行4次,最后得到一个数组=[| 1.0;0.80;0.64;0.512 |]
VS2010说我以一种无效的方式使用了“I”,并且闭包无法捕获可变值,所以这个函数不能编译。有人能提出一个实际可行的干净方法吗?多谢各位
let expSeries seed fade n =
//take see and repeatedly multiply it by
我在当前编写的程序中经常使用当前的代码模式:
let test_titles = ["a_fault"; "b_fault"; "c_fault"]
let tests: (unit -> 'component option) list = [a_fault; b_fault; c_fault]
let test_registry = List.zip test_titles tests
let apply_test (title, test) = test () |> Option
我不熟悉F#和functional,正在编写一些HTML解析代码。我想从HTML文档中删除符合某些条件的元素。这里我有一个对象序列(HtmlNodes),希望从文档中删除它们
这是使用模式匹配的惯用方法吗?另外,由于HtmlNode.Remove()对原始HtmlDocument对象有副作用,是否有任何特定的方法来构造代码以使副作用变得明显,或者应该如何处理。对于代码,你可以随心所欲地迂腐
open HtmlAgilityPack
let removeNodes (node : HtmlNod
它去哪了
let triggerFindNext,findNextEvent = IEvent.create<EventArgs>()
let triggerFindNext,findNextEvent=IEvent.create()
未定义字段、构造函数或成员“create”
也许我必须为它添加一些框架?IEvent.create函数已被弃用。创建事件的一种新方法是创建事件类型的实例。在最简单的情况下,您可以这样写:
let evt = new Event<EventAr
我不仅想找到应用于列表的函数的最大值(我只想使用list.maxBy),还想找到发生此情况时列表中的值。这感觉像是一个相当普通的操作,考虑到F#库的丰富性,我一点也不惊讶地发现它实际上已经可用了,但如果是的话,我似乎找不到它
为了举例说明,我希望能够映射一个列表domain和一个函数f
let domain = [0 .. 5]
let f x = -x * (x - 2)
至(1,1)(因为应用于列表中其他元素的函数小于1)
我第一次尝试这个:
let findMaximum domain
标签: F#
operator-overloading
所以我有这个:
open System
open System.Linq
open Microsoft.FSharp.Collections
type Microsoft.FSharp.Collections.List<'a> with
static member (+) (First : List<'a>) (Second : List<'a>) =
First.Concat(Second)
let a = [1; 2; 3; 4;
我正在学习RX(反应式扩展),发现有人在将近一年前发布了一些代码,使用F#和RX制作了一个简单的webCrawler。我试着看看是否可以重复使用代码。我下载RX,创建一个F#windows应用程序,添加对System.Reactive的引用。我的IDE是VS2010终极版,RX版本是:1.1.11111。代码如下:
#light
open System
open System.Linq
open System.Collections.Generic
open System.Net
open Sy
我需要处理毫秒时间范围内的一系列历史滴答数据。需要能够过滤特定时间段(小时、分钟等)的开始刻度。该序列的间隔可能大于跨度,因此必须将该间隔后的第一个记号选为开始记号,否则,开始记号是最接近相应时间跨度日历开始的记号
我首先想到的是以下stateful过滤函数opensTimespan:Timespan->(Timestamp->bool),它将每个间隔打开或间隔打开记号的Timespan ID捕获到一个闭包中,以便在调用之间传递:
let opensTimespan (interval: Tim
标签: F#
matrix-multiplication
我想把两个矩阵相乘
我使用的是这篇文章中的转置:
我还使用innerMult,它将两个列表中的每个元素相乘,然后将它们相加
let rec innerMult u v =
match u, v with
| [x], [y] -> x*y | u'::u, v'::v -> u'*v' + inner u v
所以使用这两个函数,我想尝试用行乘以列。当然,我假设两个矩阵都满足乘法的条件。也就是说,行必须等于列
矩阵乘法码:
let multiply (xs, ys) =
我需要在一个模块中进行一些设置,我想通过利用do块来完成这个设置。但奇怪的是,我的do块似乎从未被击中
更奇怪的是,如果我将模块代码加载到fsi中,它确实会被命中。以下是我的例子:
Main.fs
[<EntryPoint>]
let main args =
printfn "%b" TestNamespace.M.x
0
当我运行编译后的可执行文件时,我得到
>test.exe
true
为什么没有抛出异常?如果我自己在FSI中运行模块,我会
In d
标签: F#
type-providersf#-3.0
为什么这不是编译
open System
open System.Data
open System.Data.Linq
open System.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq
open Microsoft.FSharp.Linq.RuntimeHelpers
type dbSchema = SqlDataConnection<"Data Source=.;Initial Ca
在与现实世界对话的应用程序中,使用非确定性函数是不可避免的。明确区分确定性和非确定性是很重要的
Haskell有一个IO单子,它通过观察我们知道它之外的一切都是纯净的来设置不纯净的环境。这很好,如果你问我的话,当涉及到单元测试时,你可以知道他们的代码的哪一部分最终是可测试的,哪一部分不是
我找不到任何东西可以在F#中将两者分开。这是否意味着没有办法做到这一点?F#基于OCaml,与OCaml非常相似,它不是纯FP。我认为用这两种语言都无法实现你的目标 确定性和非确定性功能之间的区别不是F#型系统
我在尝试开始使用FunScript时遇到了很大的困难,我非常喜欢F#->Javascript的想法,但对于如何使用如此美观的技术的大量信息/文档,我一直感到沮丧
问题是:
FunScript项目(无主机)模板无法安装,因为在我尝试下载时VS说:“您需要安装Nuget”//Dah,我有Nuget,刚刚更新到最新版本。我正在使用VS2013 Ultimate。
我做了以下工作:
我创建了一个新的FSharp库项目,然后运行Package Maneger命令来获取所需的FunScript Libs:
我知道关于这个主题还有其他问题,例如:
。。但是,嘿,我对F#还不了解
我有一个F#项目(thelibrary),其中包含一些模块。此项目在解决方案资源管理器中引用所有必需的库。每个.fs文件都会打开模块中使用的库。F#项目编译正确
然后我有另一个F#项目,其中包含一个脚本。我参考了library和library本身使用的库。在脚本中,我用#r引用了库中的dll以及库中使用的所有库。然后我打开所有模块。
Intellisense说在我执行脚本之前一切正常
脚本返回错误:
error F
如何惯用地做到这一点:给定一个物品列表,找出其中的一个物品是否符合另一个列表中的标准,如果它做了一个动作,如果它没有做另一个动作。我在C语言中看到过这样的代码,我想知道在F语言中该怎么做
下面是在F#中必须实现的代码:
让我们查找列表1列表2=
因为我在清单1中是这样做的
设mutable found=false
对于清单2中的k,请执行以下操作:
如果i=k,那么//如果条件等于
发现这就是我提出的解决方案:
let findF list1 list2 =
list1
|&g
如果在Visual Studio Express 2013中尝试此类型定义,则会出现错误:
type Foo(bar : int) =
struct
member x.bar = bar
end
如果我将其更改为类,则不会出现任何错误:
type Foo(bar : int) =
class
member x.bar = bar
end
我得到的错误是:
The member 'bar' can not be defined because t
我想定义sumOfSquares,但不使用参数,而是依赖函数组合
下面是我的代码
let sumOfSquares = Seq.map (fun n -> n * n) >> Seq.sum
然而,我得到了以下错误
标准输入(80,5):错误FS0030:值限制。“sumOfSquares”的值
已推断为具有泛型类型
val sumOfSquares : ('_a -> int) when '_a :> seq<int>
这就行了。然而,我想看看我
我最近一直在用编程,尤其是its。现在我想知道是否有可能定义一个函数,它接受参数和结果。比如
let doTask(parameter:int) =
let task = TaskBuilder(scheduler = TaskScheduler.Current)
task {
return! Task.Factory.StartNew(fun() -> parameter + 1)
}
match FSharpx.T
是否可以使用存储在其他对象(o1)中的类型信息向下转换(到某个类型)已装箱的对象(o1)
最终目标是对函数进行一种动态调用。
我正在映射中存储签名为FSharpFunc的函数:
let o1 = box SomeType()
let t = typeof<SomeType>
//缺少协方差/逆变迫使我将其定义为obj:
设函数=映射
让我们调用f(pre:'pre-when'pre:comparison)(post:'post-when'post:comparison)=
(unb
比如说
let When true d = d
let foo = () |> When false
所以我不喜欢它的副作用,因为它是错误的:MatchFailureException
我知道我在这里有很好的副作用:let foo=if false,然后()
但警告此表达式的模式匹配不完整。告诉我可以添加所需内容。我只是不知道如何或是否可能?否则,为什么我甚至可以使用值作为参数
顺便说一句:我知道当bd=if然后d else()时我可以写,,但问题更一般
在haskell中添加了解释
在F#中创建此“复合”列表的最干净、最简单的方法是什么
输入:
[ 1; 2; 3; 4; 5 ]
期望输出:
[ [1]; [1;2]; [1;2;3]; [1,2,3,4]; [1;2;3;4;5] ]
有很多方法,但我认为这是一个干净的方法:
[1;2;3;4;5]
|> List.scan (fun x y -> x @ [y]) []
|> List.tail
使用List.scan和最后的List.tail忽略第一个元素,这是一个空列表。
标签: F#
assembly-binding-redirectfsunit
我在玩F#中的单元测试。我正在运行Visual Studio 2013社区版。我创建了一个测试项目并安装了nunit2.6.4和fsunit1.3.0.1。我使用包管理器控制台。我在项目中添加了对库的引用,并在脚本文件中引用了DLL,并添加了open子句:
#r @"C:\Users\pw\Documents\Visual Studio 2013\Projects\FSharpForQuantFirst\packages\FsUnit.1.3.0.1\Lib\Net40\FsUnit.NUnit
这个周末,我编程的乐趣是用F#编写一个300行的reversi程序。可能还需要几个周末才能找到如何使alphabeta搜索并行化的方法,这实际上超出了这个问题的范围
但我发现,我无法想出一些实现alphabeta函数的“纯功能”方法。即没有任何可变状态
有什么好主意吗
我唯一想到的是编写类似于Seq.foldUntil()函数的东西,其中累加器状态用于存储状态中的更改。可以通过传入的lambda函数取消
也许看起来像这样:
let transformWhile<'t,'s,'r> (
有没有办法欺骗编译器将内联函数A作为内联函数B的参数,并创建一个不需要调用的大型内联函数
假设我们有一段代码定义如下:
let inline action i = printfn "%d" i // printfn is for demo, originally some math
let inline iter lo hi func = for i = lo to hi do func i
iter 0 10 action
通常,内联函数不能作为函数传递(它们可以,但它们不再是内联,因为它们
我正在尝试使用F#编写一个应用程序,我需要访问一个Sql数据库。我正在尝试使用Sql类型提供程序,但在使用时:
type schema = SqlDataConnection<ConnectionString="...">
很多人似乎都明白这一点,但我看到的唯一解决方案是下载并安装适用于Windows 8.1的Windows软件开发工具包。我已经这样做了,选择了所有的选项(包括.NETSDK4.5),它似乎已经安装无误。但是,这并没有解决这个问题,当我查看程序和功能时,我可以看到安
我有以下代码:
type Client =
{ Name : string; Income : int ; YearsInJob : int
UsesCreditCard : bool; CriminalRecord : bool }
type QueryInfo =
{ Title : string
Check : Client -> bool
Positive : Decision
我想将一些html(从我的F#代码生成)发送到FsLab日志中,但似乎找不到正确的咒语来实现它
如果我的代码中有一个返回html代码段的函数,有没有一种方法可以让它直接进入页面而不被标记包围
let f () =
"""Some <b>bold</b> sample"""
let htmlContent = f ()
例如,我尝试过:
(*** hide ***)
type Html = Html of string
#if HAS_FSI_ADDHTMLP
project.json不见了,我不太明白如何更改项目的编译器(语言)。创建控制台应用程序(.Net Core)将导致使用netcoreapp1.0刷新.csproj文件的新C#项目
如何使用Visual Studio 2017 RC创建面向netcoreapp1.0的F#Console应用程序?用于.NET Core的工具仍处于“beta”级阶段(即使对于C#来说,这也很慷慨),而对于F#来说,它甚至还没有达到那个级别
此时(只需在第一次RC“刷新”之后),使用命令行(dotnet new)几
我有一个类型为类型T的树,如果你还没有读过这个优秀的系列,你可能想读一遍;这将向您展示一组处理自递归数据结构(如树类型)的好方法。遍历树的一般规则是“在这个级别上做我需要做的事情,然后递归地调用子节点上的当前函数”。在这里,看起来是这样的:
let rec treeMap f tree =
match tree with
| N (data, children) ->
N (f data, children |> List.map (treeMap f
现在我在集成Angular 2和Azure广告方面不是很开心
重现错误的步骤:
我已经创建了一个Angular 2前端、Web API(suave.io)并部署了Azure
我已经在网站和Web API上设置了Azure广告
根据这篇文章:
我获得了无记名Azure广告代币(很棒)
然后我调用Web API,我得到
XMLHttpRequest无法加载/groups/。飞行前的响应无效(重定向)
这与这个问题有关
我的Angular 2代码如下:
let headers = new Head
如何按函数比较排序:cmp
type Point =
{
x : float
y : float
}
let s = ResizeArray<Point>()
s.Add{x=1.1 ; y=1.1}
s.Add{x=2.2 ; y=2.2}
s.Add{x=3.3 ; y=3.3}
s.Add{x=2.2 ; y=2.0}
let cmp (A:Point) (B:Point) =
A.x + A.y < B.x
我试图查询解析后的Json的结果,如果找不到,我想做些别的事情
[
{
"orderId": 136,
"quantity": 5,
"price": 3.75
},
{
"orderId": 129,
"quantity": 9,
"price": 3.55
},
{
"orderId": 113,
"quantity": 11,
"price": 3.75
}
]
我的代码如下:
type Or
标签: F#
xunitlinqpadfscheck
我正在尝试实现一个自定义的任意,它生成glob语法模式,如a*c?。我认为我的实现是正确的,只是在使用Xunit运行测试时,FsCheck似乎没有使用自定义的任意模式来生成测试数据。然而,当我使用LINQPad时,一切都按预期工作。代码如下:
open Xunit
open FsCheck
type Pattern = Pattern of string with
static member op_Explicit(Pattern s) = s
type MyArbitraries
我在Visual Studio代码上使用Ionide时遇到困难,在遵循教程并重新安装后没有任何效果,一个问题仍然存在-这是Visual Studio代码找不到Microsoft Build tools 2013-我已在Microsoft网站上安装了扩展名和zip
编辑:尝试在VScode中运行f#时,系统会提示我安装MS build tools 2013
有什么想法吗
非常感谢,
Elliot您是指MS build tools 2015吗?我不认为Ionide与MS Build tools 20
标签: F#
fscheckproperty-based-testing
我编写了一个FsCheck生成器,它生成随机的glob语法模式(例如a*c?)以及与该模式匹配的随机字符串(例如abcd)。然而,我的解决方案使用了一个可变变量,对此我感到很惭愧。看看:
open FsCheck
type TestData = {Pattern: string; Text: string}
let stringFrom alphabet =
alphabet |> Gen.elements |> Gen.listOf |> Gen.map (Lis
定义了以下类型
type DownloadedItem = { Period: DateTime; Name: string } with
static member fromRdr(rdr:IDataReader) =
{ Period = rdr.GetDateTime 0; Name = rdr.GetString 1 }
static member asSeq (rdr:IDataReader) = seq {
while rdr.Re
我有一个类型,其构造函数包含两个参数:
type Foo = Foo of int * int
我可以用(int,int)的元组来调用它
但在我的例子中,我想部分应用构造函数在管道中使用它
let someFunc param =
calculateSomeInt param
|> Foo 42 //error
但这是不可能的,因为构造函数不能以咖喱形式调用
有没有可能告诉F#我想要一个curry格式的构造函数,而不必定义一个新函数让fooCtr a b=Foo(a,
标签: F#
nuget-packagefscheck
我很难找到答案:
定义一个函数functionWF和functionPath,该函数接受一个FsTree并返回一个布尔值,用于检查给定的树作为文件系统的格式是否正确,以及路径(表示为字符串列表)的格式是否正确
格式良好的文件系统不能具有指向树中不同节点的相同路径
格式正确的路径不能包含名称为空的节点
下面a显示(字符串*FsTree)列表的类型FsTree=节点
下面是FsTree的一个示例:
fsT = [Node ("f1", [Node ("f2", [])]); [Node ("f3",
关于如何有效分组/筛选列表/顺序的快速问题
仅筛选可选字段不是“无”的记录
删除“option”参数以简化未来的流程(因为没有筛选出任何流程)
团体(我相信这没有问题)
我使用的是最好的方法吗
谢谢
type tmp = {
A : string
B : int option }
type tmp2 = {
A : string
B : int }
let inline getOrElse (dft: 'a) (x: 'a option) =
ma
嗨,我有一个函数,它应该返回一个通用值选项,它看起来像:
let HandleHeaderConfirmation (client : TcpClient) (message : BaseFrame) (responseId : uint32, frameId: uint32) (isAcknowledgment : bool): Async<(Option<'TCommand> * TcpClient)> =
async{
match isA
我想用一个新的构造函数App扩展一个类型ExprTree(表达式树),该构造函数接受一个字符串和一个列表作为参数。下面是类型ExprTree:
type ExprTree =
| Const of int
| Ident of string
| Sum of ExprTree * ExprTree
| Let of string * ExprTree * ExprTree
您在评论中发布的定义是正确的。您的评论版本为:
type ExprTree =
|
我试图找出如何从事件单击访问鼠标单击的指针位置。
我想出了类似的办法
[...]
type State = { coords: Point list }
type Msg = Click of Point
let update (msg: Msg) (state: State) : State =
match msg with
| Click p -> { state with coords = p::state.coords }
我对F#还是有点陌生,我看到自己在编译器无法正确推断类型时,正在努力处理一些函数签名。在下面的示例中,编译器认为TryParse的函数类型是string->string,因此我必须使用右侧的lambda创建此定义
type SocialAccount =
| FacebookAccount
| UnknownAccount
type SocialAccount with
static member TryParse:(string -> SocialAccount
我正在尝试编写一个函数,该函数使用字符串操作数的右半部分:
let f(k:'string)= k.[..(k.Length/2)]
以下是错误消息:
Microsoft (R) Build Engine version 16.2.32702+c4012a063 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
/home/runner/project/Program.fs(1,19): error
标签: F#
canopycanopy-web-testing
我正在尝试在f#和天篷中进行常规按钮扩展
正如你所知,我们可以点击一个按钮,像这样在天篷
click (//button[contains(text(),'save')])[last()]
但我正试着做这样的事情
let _button value = sprintf "(//button[contains(text(),'%s')])[last()]" value
let button value = _button value
click button "s
标签: F#
akka.netakka-remote-actorakka-remoting
我正在学习如何从另一台机器调用远程参与者。为了模拟两台不同的机器,我有一台主机,另一台是虚拟机(VM)。网络适配器设置为NAT,因为通过此设置,我可以从VM ping主机(我读到它应该设置为桥接,但ping命令超时)
除此之外,这是主机上的RemoteActor.fsx的代码
#r "nuget: Akka.FSharp"
#r "nuget: Akka.Remote"
open System
open Akka.Actor
open Akka.Con
我已经编写了这个F#console应用程序(只有在满足条件的情况下-如果目录存在的话,才应该调用run方法):
开放系统
让转储(x:string)=
控制台写入线(x)
让validateDirectory目录funToCallWhenOk=
将(System.IO.Directory.Exists目录)与
|true->funToCallWhenOk
|false->dump(sprintf在'%s'目录中出现问题)
//如果System.IO.Directory.Exists目录存在,则
我想用Suave上传文件。我知道小文件会自动写入/tmp文件夹,但我的文件太大,无法写入。我想做的是将它们作为流进行处理,并通过Suave服务器将它们发送到长期存储
这是我的服务器:
#r“nuget:Suave”
开放系统
开放文雅
开放式插座
打开Suave.Sockets.Control
让config=defaultConfig
let socketTask(连接:连接,httpResult:httpResult)=
插座{
printfn“已启动套接字任务”
使用流=新传输流(conn
标签: F#
monadscomputation-expression
这是一个进化的问题。我试图找出为什么在CE上运行State.exec时,会出现CEs不希望出现的嵌套行为。它似乎给他们打了很多次电话。以下是我所拥有的:
type State=('s->'a*'s)
模块状态=
//明确的
//让结果x:State=funs->x,s
//不太明确,但能更好地与其他现有功能配合使用:
让结果x s=
x、
让bind(f:'a->State)(m:State):State=
//返回获取状态的函数
乐趣s->
//从m参数中获取值和下一个状态
设a,s'=ms
1 2 3 4 5 6 ...
下一页 最后一页 共 108 页