小编Joh*_*mer的帖子

歧视与文字结合

对于一个位类型,F#中的正确语法是什么,只有两个可能的值:0和1.我试过了;

type bit = 
         | 0
         | 1
Run Code Online (Sandbox Code Playgroud)

并且错误消息是error FS0010: Unexpected integer literal in union case.我需要使用 [<Literal>]吗?

我收到了一条不同的错误消息: error FS0010: Unexpected integer literal in union case. Expected identifier, '(', '(*)' or other token.

f# types literals

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

为什么F#Interactive在排序方面不同于Console运行?

我对F#interactive中的输出和Console上的输出之间的区别感到困惑.

问题概述:

给定长度为n的数组A按以下顺序对索引进行排序:

index[i] < index[j] if (A[i] < A[j]) or (A[i] = A[j] and i < j)

例如

[| 4; 2; 4; 2; 1; 1 |]  
Run Code Online (Sandbox Code Playgroud)

这里的索引会像这样排序

[| 4; 5; 1; 3; 0; 2 |]  


    let GetSorted (A:int[]) =
    let Comparer i j =
        match (A.[i], A.[j]) with
            | a1, a2 when a1 > a2 -> +1
            | a1, a2 when a1 < a2 -> -1
            | _, _ when i > j -> +1
            | _, _ -> …
Run Code Online (Sandbox Code Playgroud)

arrays sorting f# f#-interactive

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

一流的功能

让我们说我有一个功能

 let makeMonitoredFun f =

     let c = ref 0

     (fun x -> c := !c+1; printf "Called %d times.\n" !c; f x);;
Run Code Online (Sandbox Code Playgroud)

为什么我不被允许这样做.

   let mrev = makeMonitoredFun List.rev
Run Code Online (Sandbox Code Playgroud)

f#

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

F#排序数组

我有这样的数组,

[|{Name = "000016.SZ";
     turnover = 3191591006.0;
     MV = 34462194.8;}; 
  {Name = "000019.SZ";
     turnover = 2316868899.0;
     MV = 18438461.48;}; 
  {Name = "000020.SZ";
     turnover = 1268882399.0;
     MV = 7392964.366;};
  .......
    |]
Run Code Online (Sandbox Code Playgroud)

如何根据"营业额"对此数组进行排序?谢谢(没有太多的上下文来解释代码部分?我应该写多少上下文)

arrays sorting f#

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

F#中的价值限制

我有一个F#任务,我试图计算矩阵的转置.很简单,但我一直得到一个值限制错误,我无法弄清楚为什么.我咨询了许多VR错误问题,但我仍处于黑暗中.这是我的代码:

let transpose = function
    | [xs ; ys] -> 
                let rec transpose_helper = function
                    | [],[] -> []
                    | x::xs , y::ys -> [x;y] :: transpose_helper (xs,ys)
                    | _ -> failwith "The matrix is not a square matrix"
                transpose_helper(xs,ys)
    | _ -> failwith "Incorrectly formatted input"

transpose ([[1;2;3];[2;3;4]]);;
Run Code Online (Sandbox Code Playgroud)

我认为错误部分是由于空列表,但我没做什么似乎有帮助.任何指针都将非常感激.

编辑:以下版本的代码,工作.谁有人解释为什么

let transpose zs =
    match zs with 
    | [xs;ys] -> 
                let rec transpose_helper (xs, ys) = 
                    match (xs,ys) with
                    | ([],[]) -> []
                    | (x::xs , y::ys) …
Run Code Online (Sandbox Code Playgroud)

f# value-restriction

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

使用其他列表过滤列表?

我有两个清单

type Item1 = { Id: int; .... }
type Item2 = { Id: int; .... }
let list1: Item1 list = ....
let list2: Item2 list = ....
Run Code Online (Sandbox Code Playgroud)

我需要过滤list1Id存在list2.以下代码不起作用.

list1 |> Seq.filter (fun l1 -> (List.exists (fun l2 -> l1.Id = l2.Id) list2))
Run Code Online (Sandbox Code Playgroud)

它期望list2具有类型Item1 list.但是,以下代码有效.

list1 |> Seq.filter (fun l1 -> (list2 |> List.exists (fun l2 -> l1.Id = l2.Id) ))
Run Code Online (Sandbox Code Playgroud)

为什么?它们只是两种不同的方式来编写具有相同功能的代码吗?

f#

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

F#If-Then-Else麻烦

let downTo n = 

    if (n.Equals(0)) then
        printfn "\n Empty List Provided \n";;
    else
        List.rev(List.init n (fun index -> index + 1));;
Run Code Online (Sandbox Code Playgroud)

如果传递大于0的数字,我正在尝试创建列表'n'长度.如果没有,请打印错误消息.列表单独工作,但不在If-Else语句中.如何实现这一目标?请帮忙.

f#

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

对于2D数组中的循环,在F#中给出不正确的类型

我怀疑我错过了一些非常明显的东西,但这不起作用:

let t = Array2D.create 1 1 1.0
for x in t do printfn "%f" x;;
Run Code Online (Sandbox Code Playgroud)

它失败了

错误FS0001:类型'obj'与float,float32,decimal等任何类型都不兼容,因为使用了printf样式的格式字符串

有趣的是使用printf "%A""%O"打印预期的值,这表明问题在于类型推断

一维数组的相应代码工作正常

let t = Array.create 1 1.0
for x in t do printfn "%f" x;;
Run Code Online (Sandbox Code Playgroud)

作为参考,这是在最新单声道上运行的2.0版(交互式和编译器)

f# type-inference

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

使用F#从头开始构建DataTable

是否可以使用F#从头开始构建DataTable对象

我写了这段代码

module DataHelper
open System
open System.Data
open System.Data.SqlClient

let addDataRow (dt : DataTable) kerberos =
    let dr = dt.NewRow()
    dr["Kerberos"] = kerberos
    dt.Rows.Add(dr)

let Func userList : string seq = 
    let dt : DataTable = new DataTable("UserNameListType")
    let dc : DataColumn = new DataColumn("Kerberos")
    dt.Columns.Add(dc)
    Seq.iter (fun user -> addDataRow dt user) userList
    dt
Run Code Online (Sandbox Code Playgroud)

但这有太多错误

  1. VS.NET似乎不了解DataTable,DataRow类只显示我作为intellisense的"注意".
  2. 很难使用F#中的集合对象Rows,Columns,因为这些方法都没有真正起作用(在C#中很容易使用).

f#

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

这个"如果"声明我做错了什么?

所以,我有两个if语句,用于检测您是否使用HTC 8X或8S,使用手机提供的DeviceName.问题是它似乎忽略了"If"并且只运行了所有代码...例如,我放置了一行代码(用于调试),一旦运行每个部分就会显示一个消息框,但是两个消息框都显示出来了,而不仅仅是8X,显示它正确检测到我在8X上运行应用程序.这可能只是一个"愚蠢的错误",但我想不出来......

  if (Microsoft.Phone.Info.DeviceStatus.DeviceName == "Windows Phone 8X by HTC") ;
            {
                //Debugging MSG
                MessageBox.Show("8X Works")
                //Rating
                MainScore.Text = "6.1";
                //Subscores
                Processor.Text = "5.2";
                RAM.Text = "6.5";
                Graphics.Text = "8.0";
                HardDisk.Text = "5.1";
                //Issues
                Issues.Text = "0 ISSUES FOUND";
            }
            if (Microsoft.Phone.Info.DeviceStatus.DeviceName == "Windows Phone 8S by HTC");
            {
                //Debugging MSG
                MessageBox.Show("8S Works")
                //Rating
                MainScore.Text = "2.8";
                //Subscores
                Processor.Text = "3.2";
                RAM.Text = "2.4";
                Graphics.Text = "4.0";
                HardDisk.Text = "1.9";
                //Issues
                Issues.Text = "0 ISSUES FOUND";
            }
Run Code Online (Sandbox Code Playgroud)

c# windows windows-phone-8

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

调试错误:'let'不能是Fsharp中块中的最终代码元素

我的代码:

let main _ =

  let t = (System.Console.In.ReadLine ()) |> int

  for i in 1..t do
    let n = (System.Console.In.ReadLine ()) |> int

  0
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:这个'let'之后的块未完成.每个代码块都是一个表达式,必须有结果.'let'不能是块中的最终代码元素.考虑给这个块一个明确的结果.

你能帮助我吗 ?非常感谢你 .

f#

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

在F#中对列表执行功能

好吧,我已经花了将近10个小时试图在F#解决这个问题

我需要按字母顺序对列表进行排序并反转列表

  • 我甚至不知道从哪里开始按字母顺序对它们进行排序.
  • 反向列表只返回一个包含所有10个元素的列表.有人请帮助我

我想出了什么:

[<EntryPoint>]
 printfn "Enter 10 Names";;
 let mutable list = [for i in 1 .. 10 -> System.Console.ReadLine(); ]
 printfn "%A" list
 //let list = List.sort
 //printfn "%A" list
 let reverseList list = List.fold (fun acc elem -> elem::acc) [] list
 printfn "%A" (reverseList [for i in 1 .. 10 -> List.iteri])
Run Code Online (Sandbox Code Playgroud)

string f# list

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