对于一个位类型,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#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) 让我们说我有一个功能
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) 我有这样的数组,
[|{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)
如何根据"营业额"对此数组进行排序?谢谢(没有太多的上下文来解释代码部分?我应该写多少上下文)
我有一个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) 我有两个清单
type Item1 = { Id: int; .... }
type Item2 = { Id: int; .... }
let list1: Item1 list = ....
let list2: Item2 list = ....
Run Code Online (Sandbox Code Playgroud)
我需要过滤list1其Id存在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)
为什么?它们只是两种不同的方式来编写具有相同功能的代码吗?
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语句中.如何实现这一目标?请帮忙.
我怀疑我错过了一些非常明显的东西,但这不起作用:
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#从头开始构建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)
但这有太多错误
所以,我有两个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) 我的代码:
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'不能是块中的最终代码元素.考虑给这个块一个明确的结果.
你能帮助我吗 ?非常感谢你 .
好吧,我已经花了将近10个小时试图在F#解决这个问题
我需要按字母顺序对列表进行排序并反转列表
我想出了什么:
[<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)