小编Tom*_*cek的帖子

解析分层CSV的功能方法

我正在尝试创建一段代码,但无法使其正常工作.我能想到的最简单的例子是解析一些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)

f# functional-programming

4
推荐指数
1
解决办法
696
查看次数

F#使用DataReader

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 [].

  • 一切正常但它的getBytesData函数工作非常无功能.
  • 我创建零填充字节数组只是为了创建数组,有没有办法创建动态扩展或固定长度数组

有什么方法可以优化F#吗?

抱歉有点问题,但我已经开始在F#上开设一个新项目来挤出所有的汁液,所以试着让每一条线都达到最佳状态

f#

4
推荐指数
1
解决办法
1254
查看次数

F#TypeProvider"XMLProvider"给出了System.Exception

我正在尝试使用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# type-providers f#-data

4
推荐指数
1
解决办法
783
查看次数

新手f#问题

我有一个简单的函数调用需要两个元组.在类型上获取编译器错误:

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'类型不匹配

不知道哪里出错了.有人可以帮忙吗?

谢谢!

f# types tuples

3
推荐指数
2
解决办法
202
查看次数

重播F#中录制的数据流

我已经在领域的SQL数据库记录实时股票行情Id,LastTimeStamp.最后是当前股票价格(作为双倍),并且TimeStampDateTime记录价格变化的时间.

我希望以与它相同的方式重播此流,这意味着如果价格变化最初相差12秒,则价格变化事件触发(或类似的事情)应该相隔12秒.

在C#中,我可能会创建一个集合,DateTime然后通过使用时间差来触发事件来对其进行排序,以了解何时触发下一个价格变化.我意识到F#有很多与事件有关的很酷的新东西,但我不知道我怎么会在F#中开始这个.关于如何处理此问题的任何想法/代码片段/有用的链接?

sql database events f#

3
推荐指数
1
解决办法
286
查看次数

在F#中的模块中包装DLL导入

我正在尝试为某些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_eventMouseEvent目前可调用该模块代码.如何隐藏mouse_event模块的私有位置?

f# dllimport

3
推荐指数
1
解决办法
1141
查看次数

F#将值添加到现有列表中

继续与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)

但我无法弄清楚如何将另一个名单直接添加到玩家手中.

f# list

3
推荐指数
1
解决办法
82
查看次数

如何在C#中恢复异常计算?

try
{
    statement 1;
    statement 2;
    statement 3;
    statement 4;
    statement 5;
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)

以上是典型的尝试.如果其中一个语句进入catch,则编码将跳过其余语句.

我想做的是......

让我们说,语句2有一个错误并进入异常,我仍然想在语句3,4和5上工作.

我只是好奇我怎么能实现这一目标?

最简单的答案是5次尝试.

但我认为这太幼稚了.

c#

2
推荐指数
1
解决办法
346
查看次数

F#REPL for VS(2012)?

嗨有一个简单的F#REPL for VS 2012,所以我不需要创建一个项目,我可以动态进行简单的计算吗?

我觉得它有一个标签或工具箱,它可以作为以下标签停靠:

在此输入图像描述

f# visual-studio read-eval-print-loop visual-studio-2012

2
推荐指数
1
解决办法
860
查看次数

LINQ是选择新的效率所必需的

如果我从列表中选择元素的子集,我通过选择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)

c# linq

1
推荐指数
1
解决办法
512
查看次数

编译F#/ WPF代码

我在F#/ WPF编程上找到了一些好的帖子,但它似乎没有教会编译/构建代码以便用F#/ WPF制作二进制文件的方法.

我用什么命令/工具将这段代码构建/编译成执行二进制文件?刚刚运行fscfsi似乎不起作用.

#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)

wpf f#

1
推荐指数
1
解决办法
364
查看次数

F#将列表输出到文件

我是一名正在学习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)

任何帮助将不胜感激。先感谢您。

io f# file list

1
推荐指数
1
解决办法
1244
查看次数

如何获得最小深度的叶子?

例如,我有一个具有这种结构的树

let tr = Node(1,[Node(2,[Leaf(5)]);Node(3,[Leaf(6);Leaf(7)]);Leaf(4)])
Run Code Online (Sandbox Code Playgroud)

如何获得最小深度的叶子?

f#

0
推荐指数
1
解决办法
173
查看次数