我想在我将要教授的课程中使用Functional Java或Guava(或者不太可能使用Scala).尽管在JVM上运行了很多函数式语言,但我仍然希望看到与Java尽可能相似的东西,即在Java 8中具有的功能特性,在概念和语法上最兼容的东西. .
它看起来像Functional Java和Guava是最好的候选者.我无法在功能,易用性,概念接近直接Java等方面找到任何比较它们的东西.有没有人知道这些库之间的良好比较?
枚举值似乎在匹配/案例表达式中失败.这是工作表中发生的情况.
object EnumType extends Enumeration {
type EnumType = Value
val a, b = Value
}
import EnumType._
val x: EnumType = b //> x : ... .EnumType.EnumType = b
x match {
case a => "a"
case b => "b"
} //> res0: String = a
if (x == a) "a" else "b" //> res1: String = b
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?谢谢.
我刚刚写了一个在Tic-Tac-Toe中移动的功能.我想推动模式匹配.所以我写了9个makeAMove条款.每个都有一个Tic-Tac-Toe板,其空间由空符号指定.它看起来像这样.
makeAMove [[E, m12, m13],
[m21, m22, m23],
[m31, m32, m33]] X 1 1 = ...
Run Code Online (Sandbox Code Playgroud)
该子句将X放在板的左上角.X,O和E定义为标记.
data Mark = X | O | E deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
当我加载文件时,我收到此警告消息.
warning:
Pattern match checker exceeded (2000000) iterations in
an equation for ‘mov1’. (Use -fmax-pmcheck-iterations=n
to set the maximun number of iterations to n)
Run Code Online (Sandbox Code Playgroud)
我的问题是好奇心.模式匹配器在做什么样的迭代?为什么需要这么多?
当我将条款数量限制为5,并将其余条款放在另一个由默认情况链接的函数中时,没有问题.
类型fromIntegral是(Num b, Integral a) => a -> b.我想了解这是怎么可能的,代码是什么,可以根据需要将任何积分数转换为任何数字类型.
在实际代码为fromIntegral被列为
fromIntegral = fromInteger . toInteger
Run Code Online (Sandbox Code Playgroud)
该代码为fromInteger正在instance Num Int和instance Num Integer它们分别是:
instance Num Int where
...
fromInteger i = I# (integerToInt i)
Run Code Online (Sandbox Code Playgroud)
和
instance Num Integer where
...
fromInteger x = x
Run Code Online (Sandbox Code Playgroud)
假设I#调用一个C程序将一个转换Integer为一个Int我没有看到这些中的任何一个生成结果,例如,可以添加到a Float.他们如何去往Int或Integer去别的什么?
fromInteger将嵌入一个表达式,该表达式要求它生成某种类型.它无法知道所需的类型是什么?那会发生什么?
谢谢.
在这个问题中,我询问了Python中的函数组合运算符。@Philip Tzou提供了以下代码,它可以完成这项工作。
import functools
class Composable:
def __init__(self, func):
self.func = func
functools.update_wrapper(self, func)
def __matmul__(self, other):
return lambda *args, **kw: self.func(other.func(*args, **kw))
def __call__(self, *args, **kw):
return self.func(*args, **kw)
Run Code Online (Sandbox Code Playgroud)
我添加了以下功能。
def __mul__(self, other):
return lambda *args, **kw: self.func(other.func(*args, **kw))
def __gt__(self, other):
return lambda *args, **kw: self.func(other.func(*args, **kw))
Run Code Online (Sandbox Code Playgroud)
通过这些添加,我们可以使用@、*和>as 运算符来组成函数。例如,我们可以编写print((add1 @ add2)(5), (add1 * add2)(5), (add1 > add2)(5))并获取# 8 8 8. (PyCharm 抱怨布尔值不可调用(add1 > …
是否有一个可以在Haskell程序中调用的函数,:t它以交互方式执行什么操作?或者这是Haskell无法做到的事情,因为它的类型没有意义.将类型名称作为String返回的函数怎么办?
是否有一个系统可以逐步减少Haskell表达式?目的是提供延迟评估的教程示例.如果它是用Haskell编写的,那会很好,但这不是必需的.
例如,假设我们有:
myCycle xs = xs `myAppend` myCycle xs
[] `myAppend` ys = ys
(x:xs) `myAppend` ys = x: (xs `myAppend` ys)
myTake 0 _ = []
myTake _ [] = []
myTake n (x:xs) = x: (myTake (n-1) xs)
Run Code Online (Sandbox Code Playgroud)
评估> myTake 3 $ myCycle [1, 2]应该显示这样的序列.(如果我在这方面犯了任何错误,请纠正我.)
> myTake 3 $ myCycle [1, 2]
=> myTake 3 ([1, 2] `myAppend` myCycle [1, 2])
=> myTake 3 (1:([2] `myAppend` myCycle [1, 2]))
=> 1: myTake 2 ([2] `myAppend` myCycle …Run Code Online (Sandbox Code Playgroud) 我想在Python程序中使用PyTorch。安装说明需要conda。安装了Conda之后,我跑了
>conda install -c pytorch pytorch (as instructed on the PyTorch [page][1])
Run Code Online (Sandbox Code Playgroud)
看起来很有希望-直到最后。
Solving environment: done
## Package Plan ##
environment location: C:\ProgramData\Miniconda3
added / updated specs:
- pytorch
The following packages will be downloaded:
package | build
---------------------------|-----------------
icc_rt-2017.0.4 | h97af966_0 8.0 MB
vs2015_runtime-15.5.2 | 3 2.2 MB
pytorch-0.4.0 |py36_cuda80_cudnn7he774522_1 529.2 MB pytorch
mkl-2018.0.3 | 1 178.1 MB
numpy-1.14.5 | py36h9fa60d3_4 35 KB
intel-openmp-2018.0.3 | 0 1.7 MB
numpy-base-1.14.5 | py36h5c71026_4 3.8 MB
vc-14.1 | h0510ff6_3 5 KB
blas-1.0 …Run Code Online (Sandbox Code Playgroud) 我已经输入了包含这些行的代码。
from typing import Dict, List, Set, Tuple
def pairs_sum_to_k(a_set: Set[int], k: int) -> List[Tuple[int, int]]:
...
Run Code Online (Sandbox Code Playgroud)
代码编译并运行。那挺好的。当我尝试导入typingColab中没有的内容时,生成了一条错误消息,这也很好。
不好的是,当类型提示与程序不一致时,例如,将返回类型更改为 simple int,Colab 没有抱怨。这表明 Colab 可以处理类型提示语法,但它对类型声明根本不做任何事情。是这样吗?我应该期待 Colab 提供什么样的打字支持(如果有)?
谢谢。
有没有办法在 colab 程序中设置断点然后检查变量值?如果没有,那么使用 colab 时调试程序的最佳方法是什么——除了 print 语句?