标签: seq

在seq上滑动窗口

在Clojure中,在(有限的,不是太大的)seq上设置滑动窗口最好的方法是什么?我应该只使用droptake跟踪当前的指数,还是有一种我错过的更好的方式?

window clojure seq sliding

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

如何将类似java Iterator的对象转换为clojure序列

我正在使用Sesame库在内存中的三重存储上运行SPARQL查询.

我正在使用Clojure来实现这一目标.

查询结果是一个类似自定义Iterator的[1]对象,因此clojure seq不能在开箱即用的情况下工作.

将自定义java Iterator类似对象转换为clojure序列的最优雅方法是什么?

我想到的最明显和最愚蠢的想法是循环它并建立一个clojure向量,但我确信有更优雅的方法来解决这个问题.

[1] http://www.openrdf.org/doc/sesame2/api/info/aduna/iteration/Iteration.html

java sesame clojure seq

13
推荐指数
2
解决办法
3059
查看次数

Haskell`seq`运算符的时间成本

这个FAQ说明了这一点

seq运算符是

seq :: a -> b -> b
Run Code Online (Sandbox Code Playgroud)

x seqy将评估x,足以检查它是否为底部,然后丢弃结果并评估y.这可能看起来没什么用,但这意味着在考虑y之前保证会对x进行求值.

这对Haskell来说非常好,但它是否意味着在

x `seq` f x
Run Code Online (Sandbox Code Playgroud)

评估费用x将支付两次("丢弃结果")?

haskell strict lazy-evaluation seq

12
推荐指数
2
解决办法
882
查看次数

Scala:将Map映射到元组列表

我尝试使用Map.map将地图转换为元组列表.然而,这失败了.我做了以下实验:

val m = Map(("a" -> 1), ("b" -> 2))
         //> m  :     scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r1 = m.map{ case (k,v) => v}                //> r1  : scala.collection.immutable.Iterable[Int] = List(1, 2)
def toTuple[A,B](a:A,b:B) = (a,b)               //> toTuple: [A, B](a: A, b: B)(A, B)
//val r2: List[Tuple2[_,_]] = m.map(e => (e._1,e._2))
val r3 = m.map(e => toTuple(e._1,e._2))         //> r3  : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r4 = m.toSeq                                //> r4  : Seq[(String, …
Run Code Online (Sandbox Code Playgroud)

dictionary scala tuples list seq

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

如何使用tryPick获取序列的第一个元素?

我今天尝试使用Seq.first,并且编译器说它已经被弃用而不支持Seq.tryPick.它表示它应用了一个函数并返回返回Some的第一个结果.我想我可以说有趣的x - > x!= 0因为我知道第一个会在我的情况下返回一些,但是放在这里的适当约束是什么?什么是正确的语法?

为了澄清,我想以下列格式使用它:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
Run Code Online (Sandbox Code Playgroud)

f# seq

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

F#PSeq.iter似乎没有使用所有核心

我一直在F#做一些计算密集型的工作.功能类似于Array.Parallel.map其使用.NET任务并行库加快了我的代码成倍的真的很最小的努力.

但是,由于内存问题,我重新编写了我的代码的一部分,以便可以在序列表达式中进行延迟评估(这意味着我必须存储并传递较少的信息).到了评价我用的时候:

// processor and memory intensive task, results are not stored
let calculations : seq<Calculation> =  seq { ...yield one thing at a time... }

// extract results from calculations for summary data
PSeq.iter someFuncToExtractResults results
Run Code Online (Sandbox Code Playgroud)

代替:

// processor and memory intensive task, storing these results is an unnecessary task
let calculations : Calculation[] = ...do all the things...

// extract results from calculations for summary data
Array.Parallel.map someFuncToExtractResults calculations 
Run Code Online (Sandbox Code Playgroud)

当使用任何Array.Parallel函数时,我可以清楚地看到我的计算机上的所有内核都启动(CPU使用率约为100%).但是,所需的额外内存意味着程序永远不会完成.

在运行程序时使用PSeq.iter版本,CPU使用率仅为8%(并且RAM使用率最低).

那么:PSeq版本运行得如此之慢有什么原因吗?是因为懒惰的评价?我错过了一些神奇的"平行"的东西吗?

谢谢,

其他资源,两者的源代码实现(它们似乎在.NET中使用不同的并行库):

https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/array.fs

https://github.com/fsharp/powerpack/blob/master/src/FSharp.PowerPack.Parallel.Seq/pseq.fs …

parallel-processing f# lazy-evaluation seq task-parallel-library

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

为什么Seq.iter和Seq.map这么慢?

在F#中考虑以下代码:

let n = 10000000
let arr = Array.init n (fun _ -> 0)

let rec buildList n acc i = if i = n then acc else buildList n (0::acc) (i + 1)
let lst = buildList n [] 0

let doNothing _ = ()
let incr x = x + 1

#time

arr |> Array.iter doNothing         // this takes 14ms
arr |> Seq.iter doNothing           // this takes 74ms

lst |> List.iter doNothing          // this takes 19ms
lst |> …
Run Code Online (Sandbox Code Playgroud)

performance f# seq

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

管道seq到printf进行数字格式化

我正在尝试使用printf和seq打印以下模式:

0000
0001
0002
0003
Run Code Online (Sandbox Code Playgroud)

我的问题是我曾经使用过:

seq 0 10 | xargs printf %04d
Run Code Online (Sandbox Code Playgroud)

我的所有输出格式化为相同的行likeo:

0000000100020003
Run Code Online (Sandbox Code Playgroud)

我仍然无法使用xargs.在这种情况下如何正确使用它?

bash printf xargs seq

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

如何在R中的seq中插入零

我需要得到这个:

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    0    2    0    3    0    4    0    5
[2,]    0    0    0    0    0    0    0    0    0
[3,]    6    0    7    0    8    0    9    0   10
[4,]    0    0    0    0    0    0    0    0    0
[5,]   11    0   12    0   13    0   14    0   15
[6,]    0    0    0    0    0    0    0    0    0
[7,]   16    0   17    0   18    0   19    0   20 …
Run Code Online (Sandbox Code Playgroud)

r seq

11
推荐指数
4
解决办法
460
查看次数

我应该用Perl 6计算序列还是范围?

Perl 6有懒惰列表,但它也有无界的Range对象.您应该选择哪一个按整数计算?

并且有两个点的无界范围:

0 .. *
Run Code Online (Sandbox Code Playgroud)

有三个点的Seq(序列):

0 ... *
Run Code Online (Sandbox Code Playgroud)

A Range使用它们的自然顺序生成连续的东西列表.它继承自Iterable,但也是Positional,因此您可以索引范围.您可以检查是否有某些内容Range,但这不是任务的一部分.

Seq只要它知道如何到达下一个元素,A 就可以生成你喜欢的任何东西.它继承自Iterable,还有PositionalBindFailover,它Positional通过缓存和列表转换来伪造东西.如果你只是从一个元素转移到另一个元素,我认为这不是什么大问题.

我在这上面来回走动.目前我在想它的范围.

range perl6 seq raku

10
推荐指数
2
解决办法
297
查看次数