在F#Interactive中运行时,我希望以下代码创建一个简单的饼图并将其保存到磁盘:
let pie = FSharpChart.Pie([("Apples",1);("Oranges",2);("Bananas",3)])
FSharpChart.SaveAs "test.png" ChartImageFormat.Png pie
Run Code Online (Sandbox Code Playgroud)
但是,实际保存在"test.png"中的是一个空白图像.如果我将图表管道输入FShartChart.SaveAs函数,也会发生同样的情况.但是,如果我首先只执行图表创建代码并在手动执行SaveAs之前给图表提供时间,则图像会按预期保存.
有没有办法阻止对FSharpChart.Pie的调用,直到渲染完成?我在Visual Studio 2013中使用FSharpChart.fsx版本0.60.
我正在尝试将数据从FSharp.Data.CsvProvider传递到Deedle.Frame.
我几乎是F#的新手,我需要将一些CSV文件从文化"it-IT"转换为"en-US",这样我才能使用这些数据.
我找到了Deedle,我想学习如何使用它,但是我无法直接转换Deedle中的CSV文件中的数据(至少是用F#交互式打印的).
我注意到CsvProvider进行了转换,但经过几天的尝试后,我无法传递数据.
我有一个单词列表和一个相关的词性标签列表.我想使用每个索引元组作为.NET函数的输入同时迭代两个(匹配索引).这是最好的方式(它有效,但对我来说不自然):
let taggingModel = SeqLabeler.loadModel(lthPath +
"models\penn_00_18_split_dict.model");
let lemmatizer = new Lemmatizer(lthPath + "v_n_a.txt")
let input = "the rain in spain falls on the plain"
let words = Preprocessor.tokenizeSentence( input )
let tags = SeqLabeler.tagSentence( taggingModel, words )
let lemmas = Array.map2 (fun x y -> lemmatizer.lookup(x,y)) words tags
Run Code Online (Sandbox Code Playgroud) [<ReflectedDefinition>]
let rec x = (fun() -> x + "abc") ()
Run Code Online (Sandbox Code Playgroud)
上面带有递归值的示例代码会产生以下F#编译器错误:
错误FS0432:[<ReflectedDefinition>]术语不能包含前缀拼接运算符'%'的使用
我在上面的代码中看不到任何切片操作符用法,看起来像一个bug ... :)
看起来这只是报价的问题ReflectedDefinitionAttribute,正常报价效果很好:
let quotation =
<@ let rec x = (fun() -> x + "abc") () in x @>
Run Code Online (Sandbox Code Playgroud)
通过隐藏Lazy.create和Lazy.force使用产生预期结果:
val quotation : Quotations.Expr<string> =
LetRecursive
([(x, Lambda (unitVar,
Application
(Lambda (unitVar0,
Call (None,
String op_Addition[String,String,String](String, String),
[Call (None,
String Force[String](Lazy`1[System.String]), // `
[x]), Value ("abc")])),
Value (<null>)))),
(x, Call (None, Lazy`1[String] Create[String](FSharpFunc`2[Unit,String]), [x])),
(x, Call (None, String Force[String](Lazy`1[String]), …Run Code Online (Sandbox Code Playgroud) 使用下面的超简单代码,只要在表单处于焦点时按下键盘上的键,表单就会完全锁定.我在F#interactive里面运行它.关闭表单的唯一方法是单击F#interactive中的"重置会话".我已经尝试将事件处理程序添加到KeyPress,结果相同.我添加鼠标事件处理程序,菜单,组合框等没有问题.
我必须做错事,因为在键盘上按键可能不应该是F#此时的错误.有任何想法吗?
// Add reference to System.Windows.Forms to project
open System.Windows.Forms
let a = new Form()
a.Visible <- true
Run Code Online (Sandbox Code Playgroud)
我在Windows XP上使用F#2.0 for Windows + Visual Studio 2008(2010年4月发行版).
谢谢!
我最近开始使用MathNet来实现我们的线性代数,但是我在将MATLAB函数转换为MathNet时遇到了一些麻烦.
在MATLAB中,我经常使用反斜杠运算符来简单求解:
C = A\B
MathNet中的等价物是什么?
我使用C = Inv(A)*B在小矩阵中得到相同的结果,但我不知道结果是否精确.
我正在学习类型提供程序,它看起来像是一个突破性的功能。但是,我无法设法使用 JsonProvider 反序列化 json,以便目标类型具有 Generic.Dictionary 属性。可以使用 Json.NET 来完成。这是代码:
type ByProv = JsonProvider<"""{"dict":{"A":1,"B":2}}""">
type ByHand(d:Dictionary<string,int>) =
member val dict = d with get,set
let text = """{"dict":{"C":3,"D":4}}"""
let newt = JsonConvert.DeserializeObject<ByHand> text
let prov = ByProv.Parse text
printfn "%A" newt.dict.["C"]
//Can only call statically inferred A or B (and it will throw at run-time)
printfn "%A" prov.Dict.A
Run Code Online (Sandbox Code Playgroud)
显然,dict被推断为记录类型,而不是Dictionary默认类型。这可以被覆盖吗?
我正在尝试创建一段代码,但无法使其正常工作.我能想到的最简单的例子是解析一些CSV文件.假设我们有一个CVS文件,但数据以某种层次结构组织在其中.像这样:
Section1;
;Section1.1
;Section1.2
;Section1.3
Section2;
;Section2.1
;Section2.2
;Section2.3
;Section2.4
Run Code Online (Sandbox Code Playgroud)
等等
我这样做了:
let input =
"a;
;a1
;a2
;a3
b;
;b1
;b2
;b3
;b4
;b5
c;
;c1"
let lines = input.Split('\n')
let data = lines |> Array.map (fun l -> l.Split(';'))
let sections =
data
|> Array.mapi (fun i l -> (i, l.[0]))
|> Array.filter (fun (i, s) -> s <> "")
Run Code Online (Sandbox Code Playgroud)
我得到了
val sections : (int * string) [] = [|(0, "a"); (4, "b"); (10, "c")|]
Run Code Online (Sandbox Code Playgroud)
现在我想为每个部分创建一个行索引范围列表,如下所示:
[|(1, 3, …Run Code Online (Sandbox Code Playgroud) let reader = selectCommand.ExecuteReader()
let getBytesData (x : IDataReader) =
let len = reader.GetBytes(1, int64 0, null, 0, 0);
// Create a buffer to hold the bytes, and then
// read the bytes from the DataTableReader.
let buffer : byte array = Array.zeroCreate (int32 len)
x.GetBytes(1, int64 0, buffer, 0, int32 len) |> ignore
buffer
let retVal =
List [ while reader.Read() do
yield (reader.GetString(0), getBytesData reader,
reader.GetDateTime(2)) ]
Run Code Online (Sandbox Code Playgroud)
我有上面的代码从datareader读取bytes [].
getBytesData函数接受reader并从reader返回bytes [].
有什么方法可以优化F#吗?
抱歉有点问题,但我已经开始在F#上开设一个新项目来挤出所有的汁液,所以试着让每一条线都达到最佳状态
我正在尝试使用XML类型提供程序处理Twitter推文,如下面的代码所示.使用LINQ XElement函数访问tweet数据值时,代码工作正常,但是在使用XMLProvider创建的类型时,它会失败并出现例外情况:"XML不匹配:预计只有一个'title'子元素".我知道没有给出命名空间,但是,我不知道如果需要它们将如何与提供者一起指定.
// ...
open FSharp.Net
open FSharp.Data
let ns = "http://www.w3.org/2005/Atom"
// General helpers for XML
let xelem s (el: XContainer) = el.Element(XName.Get(s, ns))
// ...
let xvalue (el: XElement) = el.Value
let twitterUri = "http://search.twitter.com/search.atom?q=Windows8&rpp=100&lang=en"
type Tweets = XmlProvider<"SampleTweets.xml", Global=false>
let feed = Tweets.Load twitterUri
// title 0 & 1 produce correct values
let title0 = feed.XElement |> xelem "title" |> xvalue
let title1 = feed.XElement |> xelem "entry" |> xelem "title" |> xvalue
// title 2 produces: …Run Code Online (Sandbox Code Playgroud) f# ×9
f#-data ×3
.net ×1
arrays ×1
c# ×1
csv ×1
deedle ×1
f#-charting ×1
iteration ×1
math.net ×1
matlab ×1
quotations ×1
recursion ×1
reflection ×1
solver ×1