小编Rus*_*ott的帖子

Scala:压缩产品是什么,为什么它可以映射为一对?

较早前的问题有关zipWith,@马丁Odersky的建议的,与其类似

 foo zipWith(_ + _) bar
Run Code Online (Sandbox Code Playgroud)

(foo以及bar哪些Seq是)以下更好(实际上在Scala中有效).

(foo, bar).zipped map (_ + _)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何map知道它的论证(表面看起来似乎是一对)应该分成两个元素?

以下实际上在工作表中运行.

val list1 = List(1, 2, 3, 4)                    //> list1  : List[Int] = List(1, 2, 3, 4)
val list2 = List(5, 6, 7, 8)                    //> list2  : List[Int] = List(5, 6, 7, 8)
val zippedResult = (list1, list2).zipped        //> list3  : scala.runtime.Tuple2Zipped[Int,List[Int],Int,List[Int]] = scala.run
                                              //| time.Tuple2Zipped@f4bf78da
zippedResult.mkString(", ")                     //> res4: String = (1,5), (2,6), …
Run Code Online (Sandbox Code Playgroud)

scala

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

如何在NetLogo中生成直方图?

breed有个叫players.每player-owns一个player-strategy.有6种可能player-strategies.当我写作

histogram [player-strategy] of players

我的情节中没有任何内容.

我有一个带一支笔的情节 - 并没有设置情节或笔名.plot-name返回情节.pen-modebar.interval是1.0

我不知道如何要求当前penname.但由于情节只有一支笔,所以无所谓.

直方图命令位于plot-updatepen-update.我在一起或一次尝试过它.我也试过代码.没有区别.

我需要做什么才能显示直方图?

netlogo

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

关于“解包”生成器的 Python 规则是什么

这是一个简单的有界生成器。

def bounded_naturals(limit):
    num = 1
    while num <= limit:
        yield num
        num += 1
Run Code Online (Sandbox Code Playgroud)

如果我写

bn_gen = bounded_naturals(3)

Run Code Online (Sandbox Code Playgroud)

bn_gen 将是预期的生成器对象。

但是如果我写

(a, b, c) = bounded_naturals(3)

Run Code Online (Sandbox Code Playgroud)

abc分别为 1、2 和 3。这让我觉得很奇怪,因为代码中似乎没有任何东西要求生成器生成值。Python 规范中是否有需要这种解释的地方?

更惊人的是,如果我写

bn_gen = (a, b, c) = bounded_naturals(3)

Run Code Online (Sandbox Code Playgroud)

我得到了两个结果!bn_gen将是一个生成器对象,并且abc将是 1、2 和 3。我应该如何理解发生了什么?

最后,如果我写

(a, b) = bounded_naturals(3)

Run Code Online (Sandbox Code Playgroud)

我得到: ValueError: too many values to unpack (expected 2).

如果编译器足够聪明来执行这些其他技巧,为什么在这种情况下只要求生成器提供所需的元素数量还不够聪明?

Python 文档中是否有一节解释了所有这些?

谢谢。

python

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

如何使用运算符在 Python 中组合函数?

编写一个由其他两个函数组成的函数是相当简单的。(为简单起见,假设它们各有一个参数。)

def compose(f, g):
    fg = lambda x: f(g(x))
    return fg

def add1(x):
    return x + 1

def add2(x):
    return x + 2

print(compose(add1, add2)(5))  # => 8
Run Code Online (Sandbox Code Playgroud)

我想使用运算符进行组合,例如(add1 . add2)(5).

有没有办法做到这一点?

我尝试了各种装饰器配方,但我无法让它们中的任何一个起作用。

def composable(f):
  """
    Nothing I tried worked. I won't clutter up the question 
    with my failed attempts.
  """

@composable
def add1(x):
    return x + 1
Run Code Online (Sandbox Code Playgroud)

谢谢。

function-composition python-3.x python-decorators

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

反引号作为语法运算符

刚刚遇到了一些对我来说似乎很奇怪的事情。反引号的功能类似于语法运算符。

applyOp :: Int -> (Int -> Int -> Int) -> Int -> Int
applyOp x op y = x `op` y

>  applyOp 2 (+) 5
7
Run Code Online (Sandbox Code Playgroud)

看到这一点我很惊讶。我一直认为需要反引号来包围运算符符号或标识符,而不是可以在执行期间绑定到运算符的标识符。我是否以错误的方式思考这个问题?

haskell

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

Scala需要这个演员吗?

假设我有一个简单abstract BinaryTree的子类Node,Leaf我想写一个产生一个的函数List[Leaf].

def getLeaves(tree: BinaryTree): List[Leaf] =
    tree match {
      case Leaf(v) => List(tree.asInstanceOf[Leaf])
      case Node(left, right) => getLeaves(left) ++ getLeaves(right)
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法避免案件中的明确asInstanceOf[Leaf]演员?如果我把它遗漏,我得到一个诊断说法:发现:BinaryTree; 需要叶.Leaf

casting scala

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