[A : Manifest : WireFormat]以下代码的含义是什么?它来自com.nicta.scoobi.TextInput(可在github上获得).它似乎不是任何通常的类型边界.
def fromDelimitedTextFile[A : Manifest : WireFormat]
(path: String, sep: String = "\t")
(extractFn: PartialFunction[List[String], A])
: DList[A] = {
val lines = fromTextFile(path)
lines.flatMap { line =>
val fields = line.split(sep).toList
if (extractFn.isDefinedAt(fields)) List(extractFn(fields)) else Nil
}
}
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到有关此主题的更多信息?
我注意到当前的自动模式alist条目都以单引号结束,例如
("\\.java\\'" . java-mode)
Run Code Online (Sandbox Code Playgroud)
单引号的目的是什么?我本以期待看到
("\\.java$" . java-mode)
Run Code Online (Sandbox Code Playgroud)
我问的原因是我试图获取名称与regexp匹配的文件
^twiki\.corp.*
Run Code Online (Sandbox Code Playgroud)
以组织模式打开.我试过以下没有成功:
(add-to-list 'auto-mode-alist '("^twiki\\.corp" . org-mode))
(add-to-list 'auto-mode-alist '("\\'twiki\\.corp" . org-mode))
Run Code Online (Sandbox Code Playgroud)
以下作品:
(add-to-list 'auto-mode-alist '("twiki\\.corp" . org-mode))
Run Code Online (Sandbox Code Playgroud)
但是不是我想要的,因为嵌入了twiki.corp的文件名将在org-mode中打开.
稀疏张量与它们自身或密集张量的相乘似乎在TensorFlow中不起作用.以下示例
from __future__ import print_function
import tensorflow as tf
x = tf.constant([[1.0,2.0],
[3.0,4.0]])
y = tf.SparseTensor(indices=[[0,0],[1,1]], values=[1.0,1.0], shape=[2,2])
z = tf.matmul(x,y)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
print(sess.run([x, y, z]))
Run Code Online (Sandbox Code Playgroud)
失败并显示错误消息
TypeError: Input 'b' of 'MatMul' Op has type string that does not match type
float32 of argument 'a'
Run Code Online (Sandbox Code Playgroud)
两个张量都具有float32类型的值,通过在没有乘法运算的情况下对它们进行求值来看.y与其自身的乘法返回类似的错误消息.x与其自身的乘法运行良好.
在Clojure中,给定一个类名作为字符串,我需要创建一个新的类实例.换句话说,我如何在中实现new-instance-from-class-name
(def my-class-name "org.myorg.pkg.Foo")
; calls constructor of org.myorg.pkg.Foo with arguments 1, 2 and 3
(new-instance-from-class-name my-class-name 1 2 3)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个更优雅的解决方案
在实践中,我将在使用defrecord创建的类上使用它.因此,如果该场景有任何特殊语法,我会非常感兴趣.
在Clojure中,如何获取命名变量和函数的命名空间的名称?例如,改进以下内容:
(ns my-ns)
(def namespace-name "my-ns")
Run Code Online (Sandbox Code Playgroud)
上面的问题是,如果我想更改my-ns的名称,我还必须更改namespace-name的定义
在clojure 1.2RC1中,我希望获得一个基于其名称为字符串的函数并对其进行评估.
功能定义
(ns my-ns)
(defn mycar [x] (first x))
Run Code Online (Sandbox Code Playgroud)
以下工作:
((ns-resolve *ns* (symbol "mycar")) '(3 4))
((intern *ns* (symbol "mycar")) '(3 4))
((eval (symbol "mycar")) '(3 4))
Run Code Online (Sandbox Code Playgroud)
但他们看起来很难看.有没有更好的办法?如果没有,上面哪个是最惯用的?
如何在Java对象中设置许多不同字段的代码?我想要因素
(set! (. employee name) "Chris")
(set! (. employee age) 100)
(set! (. employee salary) 5000)
Run Code Online (Sandbox Code Playgroud)
至
(doseq [field '((name "Chris") (age 100) (salary 5000))]
(set! (. employee (first field)) (second field)))
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为句点是一个宏,并试图从字面上评估(第一个字段).顺便说一句,我明白设置字段不是好习惯.我需要与遗留代码互操作.
在统计编程语言R中,使用以下公式(在lm()或glm()中使用)
z ~ (x+y)^2
Run Code Online (Sandbox Code Playgroud)
相当于
z ~ x + y + x:y
Run Code Online (Sandbox Code Playgroud)
假设,我只有连续的预测因子,有一种简明的方法可以获得
z ~ I(x^2) + I(y^2) + I(x) + I(y) + I(x*y)
Run Code Online (Sandbox Code Playgroud)
为因子预测器做正确事情的公式是一个优点.
一种可能的解决方案是
z ~ (poly(x,2) + poly(y,2))^2
Run Code Online (Sandbox Code Playgroud)
我正在寻找更优雅的东西.
在Clojure中,是否有更优雅的方法来查找函数的完全限定名称(已知具有元信息)
(defn fully-qualified-name [fn]
(let [fn-meta (meta fn )
fn-ns (ns-name (:ns fn-meta))
]
(str fn-ns "/" (:name fn-meta))))
Run Code Online (Sandbox Code Playgroud)
需要运行时解决方案.欢迎阅读时和编译时解决方案.
我希望使用 Data.Vector.Generic.Mutable.new 创建一个可变向量。我找到了通过解冻纯向量来创建可变向量的示例,但这不是我想要做的。
这是许多失败的尝试之一:
import Control.Monad.Primitive
import qualified Data.Vector.Generic.Mutable as GM
main = do
v <- (GM.new 10) :: (GM.MVector v a) => IO (v RealWorld a)
GM.write v 0 (3::Int)
x <- GM.read v 0
putStrLn $ show x
Run Code Online (Sandbox Code Playgroud)
给我错误
No instance for (GM.MVector v0 Int)
arising from an expression type signature
Possible fix: add an instance declaration for (GM.MVector v0 Int)
Run Code Online (Sandbox Code Playgroud)
我尝试了基于 Haskell Vector 教程的变体,但没有成功。
我也欢迎关于构建向量的更清洁方法的建议。对现实世界的提及对我来说似乎很难看。
尽管有提示类型,以下代码也给了我一个反射警告。
(set! *warn-on-reflection* true)
(IllegalArgumentException.
^String (with-out-str (print "hi")))
Run Code Online (Sandbox Code Playgroud)
警告:
Reflection warning ...
call to java.lang.IllegalArgumentException ctor
can't be resolved.
Run Code Online (Sandbox Code Playgroud)
该代码是从一个更复杂的例子中提取并简化的,该例子中漂亮的打印了一个任意对象with-out-str。我正在使用Clojure 1.10.0。
有没有更简洁和/或优雅的方式来表达 let.js 中的最后一行?
(let [a ... ; int
b ... ; int
xs ... ; list
y ... ; int
z ... ; int
]
(into [a b] cat [xs [y z]]))
Run Code Online (Sandbox Code Playgroud)
结果应该是一个向量。上面的表达式对于它完成的简单任务来说看起来相当复杂。在 Python 中,这将
[a, b] + xs + [y,z]更好地捕获两个附加操作的相似性。可以捕获这种相似性的更长的变体是
(into [] cat [[a b] xs [y z]])
Run Code Online (Sandbox Code Playgroud)
我使用的尝试concat似乎很冗长,但也许更具可读性?
(vec (concat [a b] xs [y z]))
Run Code Online (Sandbox Code Playgroud) 我希望向 sbt 添加一个自定义源生成器,并将它与 Scala 协议缓冲区生成器 scalapb 一起使用。每个都是独立工作的。但是,当两者结合时,项目在清理后第一次无法编译。如果我再次运行编译,它会成功。
name := "Foo root project"
scalaVersion in ThisBuild:= "2.12.1"
sourceGenerators in Compile += Def.task {
val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
IO.write(file, """object Test extends App { println("Hi") }""")
Seq(file)
}.taskValue
PB.targets in Compile := Seq(
scalapb.gen() -> (sourceManaged in Compile).value
)
Run Code Online (Sandbox Code Playgroud)
错误信息:
[error] source file '/ ... /target/scala-2.12/src_managed/main/demo/Test.scala' could not be found
[error] one error found
[error] (compile:compileIncremental) Compilation failed
Run Code Online (Sandbox Code Playgroud)
要重现此错误,您至少需要在 src/main/protobuf 中有一个 proto 文件。
让我感到困惑的是两个源生成器,我的自定义任务和 scalapb 会发生冲突。他们不应该都写入 …
clojure ×7
namespaces ×2
scala ×2
constructor ×1
elisp ×1
emacs ×1
eval ×1
field ×1
formula ×1
generics ×1
haskell ×1
mutable ×1
r ×1
sbt ×1
scalapb ×1
tensorflow ×1
type-hinting ×1
types ×1
vector ×1