Haskell 列表是通过对 的一系列调用构建的cons,在对语法进行脱糖之后:
Prelude> (:) 1 $ (:) 2 $ (:) 3 []
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
列表是不是因为它们是这样一个函数调用序列而变得懒惰?如果这是真的,运行时如何在调用函数链时访问这些值?按索引访问也是一种语法糖吗?我们怎么能用其他方式表达它,比这更不加糖?:
Prelude> (!!) lst 1
2
Run Code Online (Sandbox Code Playgroud)
这里的基本问题可能是:
列表是 Haskell 中的基本实体,还是可以表示为更基本概念的组合?
是否有可能在最简单的 lambda 演算中表示列表?
我正在尝试实现一种语言,其中列表是在标准库中定义的,而不是作为直接硬连线在解析器/解释器/运行时中的特殊实体。
haskell functional-programming language-design lazy-evaluation
编译器不接受将元组直接传递给构造函数,如最小示例所示:
scala> case class A(a:Int, b:Int)
defined class A
scala> List((1, 2)).map(A)
<console>:14: error: type mismatch;
found : A.type
required: ((Int, Int)) => ?
List((1, 2)).map(A)
^
scala> List((1, 2)).map(A _)
<console>:14: error: _ must follow method; cannot follow A.type
List((1, 2)).map(A _)
^
Run Code Online (Sandbox Code Playgroud)
Scala 解析器组合器具有^^用于此的运算符。fastparse 库中有类似的东西吗?
我知道 Scala.js 可以转译为 JS,但它不支持反射。有什么方法可以解释用户提供的 Scala 代码而不重复到服务器端?
如果以这种方式解释 Scala 是不可能的,是否可以从 Scala 代码(即从将被转译的 Scala 代码)运行用户提供的 JavaScript 代码?
当我们知道要保留的非 NaN 数量时,本网站中的 Pandas 和其他问题/答案为这种情况提供了解决方案。如何有效地仅删除最差的行,或者如果有多个行是最差的行。下面的一些示例展示了如何通过设置轴来删除列,也可以删除行。然而,我们需要指定要保留多少个非 NaN。
>>> import numpy as np
>>> df = pd.DataFrame([[1,np.nan,1,np.nan], [1,1,1,1], [1,np.nan,1,1], [np.nan,1,1,1]], columns=list('ABCD'))
A B C D
0 1.0 NaN 1 NaN
1 1.0 1.0 1 1.0
2 1.0 NaN 1 1.0
3 NaN 1.0 1 1.0
>>> df.dropna(thresh=3, axis=1)
A C D
0 1.0 1 NaN
1 1.0 1 1.0
2 1.0 1 1.0
3 NaN 1 1.0
Run Code Online (Sandbox Code Playgroud)
或者完全删除它们:
>>> df.dropna(axis=1)
C
0 1
1 1
2 1
3 1
Run Code Online (Sandbox Code Playgroud)
请注意, 我在下面提供了更多背景信息。虽然欢迎提供具体解决方案的提示,但我更喜欢帖子标题中所述的有关一般情况的答案。
上下文 …
我试图在单个case子句中匹配所有二元运算符,但以下代码给出了错误:
object BinOp is not a case class, nor does it have a valid unapply/unapplySeq member
Note: def unapply(a: AST.this.Expr, b: AST.this.Expr): Option[(AST.this.Expr, AST.this.Expr)] exists in object BinOp, but it cannot be used as an extractor as it has more than one (non-implicit) parameter.
Run Code Online (Sandbox Code Playgroud)
遍历树的核心代码:
tree match {
case ... other ... cases
case BinOp(a, b) => traverse(a), traverse(b)
}
Run Code Online (Sandbox Code Playgroud)
AST 类如下:
sealed trait Expr
case class Num(value: java.lang.Number) extends Expr
sealed trait BinOp extends Expr {
val …Run Code Online (Sandbox Code Playgroud) scala ×3
case-class ×2
dataframe ×1
fastparse ×1
haskell ×1
javascript ×1
lambda ×1
missing-data ×1
nan ×1
pandas ×1
python ×1
reflection ×1
scala.js ×1
transpiler ×1