let fibgen (x,y) = if(x < 4000000) then Some(x+y, (y, x+y)) else None
let fibseq = Seq.unfold fibgen (1,1)
Run Code Online (Sandbox Code Playgroud)
在第二行键入不匹配错误。我究竟做错了什么?我正在使用 F# 2.0
首先在我的交互式窗口上完成重置会话仍然出现相同的错误
,然后重新启动我的项目现在工作正常。是的,我在同一会话中执行了下面的代码
// The option type is a discriminated union.
type Option<'a> =
| Some of 'a
| None
Interactive window Output as below
val fibgen : int * int -> Option<int * (int * int)>
>
Eluer2.fs(27,25): error FS0001: Type mismatch. Expecting a
int * int -> ('a * (int * int)) option
but …Run Code Online (Sandbox Code Playgroud) 我有以下代码.在这一行
if min<=0 then min <- List.nth list i |>ignore
Run Code Online (Sandbox Code Playgroud)
我有2个错误.首先是0它
This expression was expected to have type
unit
but here has type
int
Run Code Online (Sandbox Code Playgroud)
然后在i它
This expression was expected to have type
unit
but here has type
int
Run Code Online (Sandbox Code Playgroud)
*我也看过这个 并尝试忽略,但它不起作用
let replace touple2=
let first (a,_,_,_,_)=a
let second (_,b,_,_,_)=b
let third (_,_,c,_,_)=c
let forth (_,_,_,d,_)=d
let fifth (_,_,_,_,e)=e
let sortedlist list= List.sort(list)
let GetMin list=
list |> List.rev |> List.head
let mutable min=list.Head
let mutable …Run Code Online (Sandbox Code Playgroud) 任何人都可以用非常简单的方式解释 F# 中的 List.Fold 和 List.Foldback 是什么。我读了几本书,并试图在网上搜索一个简单的解释,但我仍然不明白。
- 这不是一个重复的问题,也没有在另一个链接中回答。
我正在为 VSCode 使用 .NET 笔记本。当前版本:v1.0.2419011
我正在尝试使用 nuget 包进行实验
我首先像这样加载包
#r "nuget: Microsoft.CodeAnalysis.Workspaces.MSBuild"
Run Code Online (Sandbox Code Playgroud)
然后我意识到我需要预览版本
#r "nuget: Microsoft.CodeAnalysis.Workspaces.MSBuild, 4.0.0-3.final"
Run Code Online (Sandbox Code Playgroud)
但是,笔记本不允许我更改软件包的版本。它的错误是
错误:无法添加 Microsoft.CodeAnalysis.Workspaces.MSBuild 版本 4.0.0-1.final,因为之前添加了版本 3.11.0。
我没有看到任何清除包或强制覆盖的选项。在之前加载不同版本后如何更改软件包版本?
我在VS2010中尝试了以下代码:
open System.Security.Cryptography
let rsaTest1 =
let ecKey = [|0uy..143uy|] // junk data for testing
let ecKeyMod = ecKey.[8..8+128-1]
let ecKeyExp = ecKey.[136..136+8-1]
let rsa = RSAParameters(Modulus = ecKeyMod, Exponent = ecKeyExp)
rsa
let rsaTest2 =
let ecKey = [|0uy..143uy|] // junk data for testing
let rsa = RSAParameters(Modulus = ecKey.[8..8+128-1], Exponent = ecKey.[136..136+8-1])
rsa
Run Code Online (Sandbox Code Playgroud)
如果我突出显示所有代码并将其发送到F#Interactive(Alt + Enter),则rsaTest1可以工作,但rsaTest2会给出错误消息,
System.NullReferenceException: Object reference not set to an instance of an object.
at <StartupCode$FSI_0004>.$FSI_0004.main@() in P:\proj\Tachograph\Project\CompuTachTest\CompuTachTest\rsaTest.fsx:line 16
Run Code Online (Sandbox Code Playgroud)
但是,如果我将rsaTest2从值更改为函数并调用它,
let rsaTest2 () =
let …Run Code Online (Sandbox Code Playgroud) 我在http://www.tryfsharp.org上的交互式窗口中收到此错误.它在视觉工作室工作正常,我不知道如何解决它.任何帮助将不胜感激
let randomNumberGenerator count =
let rnd = System.Random()
List.init count (fun numList -> rnd.Next(0, 100))
let rec sortFunction = function
| [] -> []
| l -> let minNum = List.min l in
let rest = List.filter (fun i -> i <> minNum) l in
let sortedList = sortFunction rest in
minNum :: sortedList
let List = randomNumberGenerator 10
let sortList = sortFunction List
printfn "Randomly Generated numbers in a NON-SORTED LIST\n"
printfn "%A" List
printfn "\nSORTED …Run Code Online (Sandbox Code Playgroud) 我有一系列像这样的3元组:
[(123, 143 ,136), (177, 284, 248), (143, 182, 252)...]
Run Code Online (Sandbox Code Playgroud)
我想通过总结所有3元组来将它们分成单个3元组:
[((x1+x2+x3),(y1+y2+y3),(z1+z2+z3))]
Run Code Online (Sandbox Code Playgroud)
然后找到他们的平均值
[((x1+x2+x3)/n,(y1+y2+y3)/n,(z1+z2+z3)/n)]
Run Code Online (Sandbox Code Playgroud)
我总结他们的尝试:
let averageRGB seqRGB = seqRGB |> Seq.fold(fun(R, G, B)(r, g, b) -> (R+r, G+g, B+b)) (0, 0, 0) (r, g, b)
Run Code Online (Sandbox Code Playgroud)
我试过用:
我可以用F#interactive做到这一点,它运行正常:
> printf "%d\n" 5;;
5
val it : unit = ()
Run Code Online (Sandbox Code Playgroud)
但如果我在"真正的"F#项目中做同样的事情:
let main argv =
printf "%d\n" 5
Run Code Online (Sandbox Code Playgroud)
我尝试编译时遇到此错误:
Type mismatch. Expecting a
'a -> int
but given a
'a -> unit
The type 'int' does not match the type 'unit'
Run Code Online (Sandbox Code Playgroud)
将语句包装ignore()或管道化为ignore(|> ignore)也不起作用.
这是一个语义错误,但我不知道如何推理它,谷歌没有帮助.
为什么它在F#交互式工作而不是在实际的F#项目中工作,为什么它在语义错误?
只是尝试制作一个非常简单的平均值float list -> float,即可找到列表的平均值.这是我的代码:
let list ls = List.fold (fun acc float -> acc + float) 0.0 ls;;
list [1.60; 2.30; 5.0; 2.30];;
Run Code Online (Sandbox Code Playgroud)
输出是 11.2
我需要在函数中添加一些可以11.2用x元素划分来找到平均值的东西.
有帮助吗?
我如何按变量对列表进行排序但是按升序排序?
就像是:
Data |> List.sortBy(fun t -> t.Date,ascending(t.Value))
Run Code Online (Sandbox Code Playgroud)
以上就是一个例子,我知道如果运行它将不起作用.
我正在尝试将此 Python 代码转换为 F# 而不使用不可变变量或List.map. 我仍然是这个新手。
def findMatches(s,l):
temp=[]
for i in l:
if i[0]==s:
temp.append(i[1])
temp.sort()
return temp
l=findMatches("A",[("A",5),("AA",9),("BB",6),("A",0)])
print(l)
Run Code Online (Sandbox Code Playgroud)
我已经开始:
let findMatches s l =
for e1, e2 in list do
if e1 = s then ...
Run Code Online (Sandbox Code Playgroud)
如果我朝着正确的方向前进或下一步要去哪里,则并非完全如此。
> (Console.Read() = (int 'd'));;
d
val it: bool = true
> (Console.Read() = (int 'd')) && (Console.Read() = (int 'o'));;
val it: bool = false
Run Code Online (Sandbox Code Playgroud)
它似乎在没有调用 Read 的情况下终止,编译器如何知道使表达式为 false?