好的,所以我需要一个所有正整数的列表.首先想到的是:
let numbers:Seq<bigint>=Seq.initInfinite n...
Run Code Online (Sandbox Code Playgroud)
但initInfite实际上并不存在:http://msdn.microsoft.com/en-us/library/ee370429.aspx (与bigint不同)它唯一:Int32.MaxValue = 2,147,483,647,这远不够大.
目前我的计划是用某种手工类替换序列(可能是IEnumerable的意思).这很简单(可能对我的使用更有效)但我想知道如何做到这一点
可以说我有以下内容:
f :: a -> b -> c
g :: b -> c
g = f 10
Run Code Online (Sandbox Code Playgroud)
现在让我们说f实际上:
f x y = f1 x + y
Run Code Online (Sandbox Code Playgroud)
将:
g `seq` ...
Run Code Online (Sandbox Code Playgroud)
实际上是评估f1 10,所以以后运行时
g 9
Run Code Online (Sandbox Code Playgroud)
它实际上只是一个简单的添加?
如果没有,有没有办法"评估"部分应用功能的部分?
我在寻找一个通用的解决办法,不依赖于知道如何f和g工作.
我是Clojure的新手,我想知道是否有办法从两个或更多序列创建一系列地图.
假设你有:
(def numbers '(1 2 3))
(def letters '("a" "b" "c"))
(def shapes '("circle" "square" "triangle"))
Run Code Online (Sandbox Code Playgroud)
如果你合并那些我想在Ruby中得到哈希数组,或者在Clojure中得到一系列地图?
({:number 1, :letter "a", :shape "circle"} {:number 2, :letter "b", :shape "square"} {:number 3, :letter "c", :shape "triangle"})
Run Code Online (Sandbox Code Playgroud)
谢谢!
在解决第12个项目的欧拉问题时,我开始着手制作无限序列以获得连续的三角形数字.我的第一次尝试是:
let slowTriangularNumbers =
let rec triangularNumbersFrom n =
seq {
yield seq { 0 .. n } |> Seq.sum
yield! triangularNumbersFrom (n + 1)
}
triangularNumbersFrom 1
Run Code Online (Sandbox Code Playgroud)
事实证明这是非常缓慢的 - 每次获得下一个项目时,它必须计算导致的所有增加n.
我的下一次尝试是:
let fasterTriangularNumbers =
let cache = System.Collections.Generic.Dictionary<int, int>()
cache.[0] <- 0
let rec triangularNumbersFrom n =
seq {
cache.[n] <- cache.[n - 1] + n
yield cache.[n]
yield! triangularNumbersFrom (n + 1)
}
triangularNumbersFrom 1
Run Code Online (Sandbox Code Playgroud)
引入可变字典已经大大加快了它的速度,但是有一个可变集合这是正常的,还是我可以用另一种方式表示状态?
我有一系列需要过滤的数据.这很明显,因为我们Seq.filter有价值.但是,我的问题是我需要过滤,直到最终的集合将达到一定数量的项目.我不想对所有项目执行过滤而不是截断,我想在不再需要它的时候停止过滤.
在命令式编程中,基本上这是一项非常简单的任务 - 我可以在F#中轻松完成,就像在C#中完成一样,但我想在功能风格上做到这一点.
我已经看了一下该Collections.Seq模块,但我没有发现任何可以帮助我的东西.事实上我需要类似的东西filterWhile.有任何想法吗?
谢谢你的帮助.
我想创建一个简单的bash循环,它迭代一系列具有特定间隔的数字,然后是不同的数字序列,例如
for i in $(seq 0 5 15)
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
但是在通过i= 0,5,10,15进行交互之后,我希望它能够反复说出30,35,40,45.
有没有办法使用seq?还是另类?
它适用于for循环和可变变量:
let addLnNum filename =
use outFile = new StreamWriter(@"out.txt")
let mutable count = 1
for line in File.ReadLines(filename) do
let newLine = addPre (count.ToString()) line
outFile.WriteLine newLine
count <- count + 1
Run Code Online (Sandbox Code Playgroud)
但它非常"无功能",所以我很好奇这样做的正确方法是什么?我想到如何将索引号附加到字符串列表:
let rec addIndex (startInd:int) l=
match l with
|x::xs -> startInd.ToString()+x :: (addIndex (startInd+1) xs)
|[] -> []
Run Code Online (Sandbox Code Playgroud)
但它不适用于File.ReadLines:
let addLnNum2 filename =
use outFile = new StreamWriter(@"out.txt")
File.ReadLines(filename)
|> addIndex 1
|> ignore
//Error 1 Type mismatch. Expecting a Collections.Generic.IEnumerable<string> -> 'a
//but given a …Run Code Online (Sandbox Code Playgroud) 我定义了以下diff函数Seq[Int],用于view避免复制数据:
object viewDiff {
def main(args: Array[String]){
val values = 1 to 10
println("diff="+diffInt(values).toList)
}
def diffInt(seq: Seq[Int]): Seq[Int] = {
val v1 = seq.view(0,seq.size-1)
val v2 = seq.view(1,seq.size)
(v2,v1).zipped.map(_-_)
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码失败了UnsupportedOperationException.如果我使用slice而不是view它的工作.
有谁能解释一下?
[用scala 2.10.5和2.11.6测试]
我选择了卡洛斯的答案,因为这是对该问题的(第一个)正确解释.但是,som-snytt的答案更加详细,并提供了一个使用压缩对象视图的简单解决方案.
我还发布了一个非常简单的解决方案,适用于这种特定情况.
在上面的代码中,我也在计算seq导数的算法上犯了一个错误.最后一行应该是:seq.head +: (v2,v1).zipped.map( _-_ )
我正在使用光滑的scala play 2.我有一个Seq喜欢
val customerList: Seq[CustomerDetail] = Seq(CustomerDetail("id", "status", "name"))
Run Code Online (Sandbox Code Playgroud)
我想在此customerList中添加一个CustomerDetail项.我怎样才能做到这一点?我已经试过了
customerList :+ CustomerDetail("1", "Active", "Shougat")
Run Code Online (Sandbox Code Playgroud)
但这没有做任何事情.
我有一个mySources变量,seq<Async <string []>>.我的目标是将序列展平并将序列中的所有元素连接在一起Async<string []>
我正在使用Seq.collect方法.
let myJoinedAsyncs = Seq.collect (fun elems -> elems) mySources
但是这行在mySource上给出了一个错误,表明:
'Async'类型与'seq <'a>'类型不兼容
有任何想法吗?谢谢!
seq ×10
f# ×5
scala ×2
asynchronous ×1
bash ×1
biginteger ×1
clojure ×1
filter ×1
for-loop ×1
hashmap ×1
haskell ×1
ienumerable ×1
immutability ×1
map ×1
readlines ×1
sequence ×1