我正在尝试创建一段代码,但无法使其正常工作.我能想到的最简单的例子是解析一些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) 我有一个简单的函数调用需要两个元组.在类型上获取编译器错误:
module test
open System.IO
open System
let side (x1,y1) (x2,y2) : float =
Math.Sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
let a = side ( 2s, 3s ) ( 1s, 2s )
Run Code Online (Sandbox Code Playgroud)
错误2类型'float'与'int16'类型不匹配
不知道哪里出错了.有人可以帮忙吗?
谢谢!
我已经在领域的SQL数据库记录实时股票行情Id,Last和TimeStamp.最后是当前股票价格(作为双倍),并且TimeStamp是DateTime记录价格变化的时间.
我希望以与它相同的方式重播此流,这意味着如果价格变化最初相差12秒,则价格变化事件触发(或类似的事情)应该相隔12秒.
在C#中,我可能会创建一个集合,DateTime然后通过使用时间差来触发事件来对其进行排序,以了解何时触发下一个价格变化.我意识到F#有很多与事件有关的很酷的新东西,但我不知道我怎么会在F#中开始这个.关于如何处理此问题的任何想法/代码片段/有用的链接?
我正在尝试为某些windows api函数创建一个"包装器"模块user32.dll.我还在学习F#所以我对F#中的继承和多态如何工作以及如何将其应用于这种情况非常模糊.
我有这个模块:
module MouseControl =
[<DllImport( "user32.dll", CallingConvention = CallingConvention.Cdecl )>]
extern void ShowCursor(bool show)
[<DllImport( "user32.dll", CallingConvention = CallingConvention.Cdecl )>]
extern void internal mouse_event(int flags, int dX, int dY, int buttons, int extraInfo)
let MouseEvent(flags, dX, dY, buttons, extraInfo) = mouse_event(flags, dX, dY, buttons, extraInfo)
Run Code Online (Sandbox Code Playgroud)
我的目标是能够mouse_event从使用该模块的其他代码中"隐藏"该函数,而不是将该函数公开为MouseEvent.有了这个代码都 mouse_event和MouseEvent目前可调用该模块代码.如何隐藏mouse_event模块的私有位置?
继续与F#一起创建纸牌游戏系列.现在我不得不在卡片列表中添加值.我有
type Player = {Name : String; Hand : Card list}
Run Code Online (Sandbox Code Playgroud)
我能从牌组中取出牌,效果很好.我也可以创建新列表
let player = {Name = "Player"; Hand = List.Empty}
let testlist = List.append player.Hand anotherlist
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将另一个名单直接添加到玩家手中.
try
{
statement 1;
statement 2;
statement 3;
statement 4;
statement 5;
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)
以上是典型的尝试.如果其中一个语句进入catch,则编码将跳过其余语句.
我想做的是......
让我们说,语句2有一个错误并进入异常,我仍然想在语句3,4和5上工作.
我只是好奇我怎么能实现这一目标?
最简单的答案是5次尝试.
但我认为这太幼稚了.
嗨有一个简单的F#REPL for VS 2012,所以我不需要创建一个项目,我可以动态进行简单的计算吗?
我觉得它有一个标签或工具箱,它可以作为以下标签停靠:

如果我从列表中选择元素的子集,我通过选择new来获得任何东西,只获得我将使用的属性.或者编译器是否只是优化了它,所以我可以停止使用select new,例如:
var q = from n in TheseGuysHaveABunchOfProperties
where n.State == "AK"
select new { Name = n.Name, Phone = n.Phone };
q.ToList().ForEach(x => Debug.WriteLine(x.Name + x.Phone);
Run Code Online (Sandbox Code Playgroud)
与
var q = from n in TheseGuysHaveABunchOfProperties
where n.State == "AK" select n;
q.ToList().ForEach(x => Debug.WriteLine(x.Name + x.Phone);
Run Code Online (Sandbox Code Playgroud) 我在F#/ WPF编程上找到了一些好的帖子,但它似乎没有教会编译/构建代码以便用F#/ WPF制作二进制文件的方法.
我用什么命令/工具将这段代码构建/编译成执行二进制文件?刚刚运行fsc或fsi似乎不起作用.
#light
#I @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0"
#r @"WindowsBase.dll"
#r @"PresentationCore.dll"
#r @"PresentationFramework.dll"
open System
open System.Windows
(* From Chap 1 - SayHello.cs *)
let win = new Window()
win.Title <- "Say Hello"
win.Show()
#if COMPILED
[<STAThread()>]
do
let app = new Application() in
app.Run() |> ignore
#endif
Run Code Online (Sandbox Code Playgroud) 我是一名正在学习F#的学生,目前正在尝试将列表输出到通过聚类算法从分析中创建的文件。我想我已经接近了,但从第二个elem处收到了错误消息:“类型'int列表'与byte,int16,int32,int64,sbyte,uint16,uint32,uint64,nativeint, unativeint,源于使用printf样式的格式字符串”,这是我的代码:
let printNumbersToFile fileName =
use file = System.IO.File.CreateText(fileName)
clusteredIds
|> List.iter (fun elem -> fprintf file "%d " elem)
fprintfn file ""
printNumbersToFile "C:\Users\Jessica\Desktop\CTU Stuff\Dissertation\Programs For Dissertation\Fsharp\DensityClustering\Test.csv"
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。先感谢您。
例如,我有一个具有这种结构的树
let tr = Node(1,[Node(2,[Leaf(5)]);Node(3,[Leaf(6);Leaf(7)]);Leaf(4)])
Run Code Online (Sandbox Code Playgroud)
如何获得最小深度的叶子?