小编Ral*_*lph的帖子

Clojure范围宏

作者R. Kent Dybvig在第86页的"The Scheme Programming Language,4th Edition"一书中,作者define-syntax为一个case接受其条件范围的语句编写了一个(Scheme宏).我以为我会在Clojure中尝试这个.

这是结果.

我怎样才能改善这个?我用:ii,:ie,:ei,和:ee用于运营商的范围,分别表示包含性的包容性,包容独占的,独占的包,以及异排他性的,.有更好的选择吗?

我选择扩展到一个cond而不是离散的if陈述,因为我觉得我将从cond宏的任何未来改进中获益.

(defmacro range-case [target & cases]
  "Compare the target against a set of ranges or constant values and return
   the first one that matches. If none match, and there exists a case with the
   value :else, return that target. Each range consists of a vector containing
   3 terms: a lower bound, …
Run Code Online (Sandbox Code Playgroud)

macros case clojure

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

结合Clojure defprotocol和defrecord

据我所知,如果我想定义一个defprotocol只能由一个实现的协议()defrecord,我仍然必须首先定义协议,然后定义defrecord实现它的协议:

(defprotocol AProtocol
  (a-method [this])
  (b-method [this that]))

(defrecord ARecord [a-field b-field]
  AProtocol
  (a-method [this] ...)
  (b-method [this that] ...))
Run Code Online (Sandbox Code Playgroud)

有没有办法将两者结合起来,也许是用"匿名"协议?

protocols clojure

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

JAX-RS和未知的查询参数

我有一个调用RESTEasy(JAX-RS)Java服务器的Java客户端.我的一些用户可能拥有比服务器更新版本的客户端.

该客户端可以调用服务器上的资源,该资源包含服务器不知道的查询参数.是否有可能在服务器端检测到这一点并返回错误?

我理解,如果客户端调用尚未在服务器上实现的URL,则客户端将收到404错误,但如果客户端传入未实现的查询参数(例如:),会发生什么?sort_by=last_name

rest jax-rs query-parameters

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

Scala模式匹配中的自动拆箱

在下面的代码中,我收到一个编译错误,指出我的'x'类型不匹配:

val someRef: java.lang.Long = 42L
someRef match {
  case x: Long => println("The answer: " + x)
  case _ => println("Unknown")
}
Run Code Online (Sandbox Code Playgroud)

如何让Scala在match语句中自动取消装箱someRef?

unboxing scala pattern-matching

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

Ant/Ivy用于项目建设

我正在考虑将我管理的Maven项目切换到Apache-Ant/Ivy.我需要更多地控制构建过程,并且对Maven感到非常沮丧.请不要评论Maven有多棒.我的问题是关于常春藤.

我想建立一个"标准"Ant构建模板,以后可以用于其他项目,只需要很少的更改.

我将建立一个中央"企业"存储库,我们可以放置在公共Maven存储库中不可用的第三方库(例如商业库,Sun库,专有库等).此企业存储库将在我们的本地LAN上提供,但可能无法从办公室外部获得.

每个开发人员都将拥有一个私有存储库~/.ivy/repository.我希望Ant构建能够使用企业存储库中已更改的库版本自动更新此私有存储库.

~/.ivy/ant,我计划build.xml使用includeAnt 1.8中的任务放置"标准"模块以包含在单个项目文件中.这些模块将提供之类的东西Scala,并Clojure汇编目标与不同版本的不同Scala和Clojure的版本(如:scala-compile-2.9.1.xml,clojure-compile-1.3.xml等)构建模块将在企业仓库中,应该如果他们改变在私有仓库自动更新.

每个项目都将遵循一个标准的Maven目录结构:${project}/src/main/java,${project}/target/classes,等.

在过去,我尝试使用常春藤,但Ant构建文件必须非常大(模板构建文件> 500行)并且难以管理/编辑.我希望通过将标准目标放在~/.ivy/ant目录中的自己的构建模块中,我可以避免代码膨胀.

可以这样做吗?我离开基地了吗?我在Ivy上找到的唯一文档是在Apache网站(http://ant.apache.org/ivy).有没有其他文件,包括书籍?

ant clojure ivy

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

并行Scala流的内存消耗

我编写了一个Scala(2.9.1-1)应用程序,需要处理来自数据库查询的数百万行.我正在使用前面一个问题的答案中显示的技术转换ResultSet为a :Stream

class Record(...)

val resultSet = statement.executeQuery(...)

new Iterator[Record] {
  def hasNext = resultSet.next()
  def next = new Record(resultSet.getString(1), resultSet.getInt(2), ...)
}.toStream.foreach { record => ... }
Run Code Online (Sandbox Code Playgroud)

这非常有效.

由于foreach闭包的主体非常占用CPU,并且作为函数式编程的实用性的证明,如果我在.par之前添加一个foreach,则闭包并行运行而不需要其他工作,除了确保闭合的主体是线程安全的(它是以函数样式编写的,除了打印到线程安全日志之外没有可变数据).

但是,我担心内存消耗.是.par导致整个结果集在RAM中加载,或做并联运行负荷只有尽可能多的行,因为它有活动线程?我已经将4G分配给了JVM(64位-Xmx4g)但是将来我会在更多的行上运行它,并担心我最终会得到一个内存不足.

是否有更好的模式以功能方式进行这种并行处理?我一直在向同事们展示这个应用程序,作为函数式编程和多核机器价值的一个例子.

parallel-processing memory-management scala

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

向F#区分联合添加常量字段

是否可以向F#区分联合添加常量字段值?

我可以这样做吗?

type Suit
  | Clubs("C")
  | Diamonds("D")
  | Hearts("H")
  | Spades("S")
  with
    override this.ToString() =
      // print out the letter associated with the specific item
  end
Run Code Online (Sandbox Code Playgroud)

如果我正在编写Java枚举,我会向构造函数添加一个私有值,如下所示:

public enum Suit {
  CLUBS("C"),
  DIAMONDS("D"),
  HEARTS("H"),
  SPADES("S");

  private final String symbol;

  Suit(final String symbol) {
    this.symbol = symbol;
  }

  @Override
  public String toString() {
    return symbol;
  }
}
Run Code Online (Sandbox Code Playgroud)

f# playing-cards discriminated-union

6
推荐指数
2
解决办法
634
查看次数

Haskell解析器到AST

作为学习Haskell(并折磨自己)的练习,我正在考虑编写一个可配置的Haskell代码美化器.

它将支持用JSON或YAML(或更好的东西?)编写的配置文件,它指定排序导入,排序/分组dataclass语句,部分之间的行数等选项.

我正在寻找Haskell 98的解析器,它生成一个抽象语法树(AST)并保留注释.解析GHC及其语言扩展将是一个奖励.

在没有这样的事情的情况下,我想我可以编写一个递归下降的解析器或使用Parsec或解析器生成器的解析器.也许滚动我自己会增加学习(和折磨:-)).

在其中一个开源许可证下是否有完整的Haskell-> AST解析器?如果我在这个项目上取得任何进展,我会把它放在github上.

parsing haskell abstract-syntax-tree

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

Scala中的枚举具有多个构造函数参数

我正在编写我的第一个大型Scala程序.在Java等价物中,我有一个枚举,其中包含我的UI控件的标签和工具提示:

public enum ControlText {
  CANCEL_BUTTON("Cancel", "Cancel the changes and dismiss the dialog"),
  OK_BUTTON("OK", "Save the changes and dismiss the dialog"),
  // ...
  ;

  private final String controlText;
  private final String toolTipText;

  ControlText(String controlText, String toolTipText) {
    this.controlText = controlText;
    this.toolTipText = toolTipText;
  }

  public String getControlText() { return controlText; }
  public String getToolTipText() { return toolTipText; }
}
Run Code Online (Sandbox Code Playgroud)

别介意使用枚举的智慧.还有其他地方我想做类似的事情.

如何使用scala.Enumeration在Scala中执行此操作?Enumeration.Value类只接受一个String作为参数.我需要继承它吗?

谢谢.

enums scala

5
推荐指数
2
解决办法
5313
查看次数

Clojure程序读取自己的MANIFEST.MF

Clojure程序如何找到自己的MANIFEST.MF(假设它打包在一个JAR文件中).

我试图从我的"-main"函数执行此操作,但我找不到要在以下代码中使用的类:

  (.getValue
    (..
      (java.util.jar.Manifest.
        (.openStream
          (java.net.URL.
            (str
              "jar:"
              (..
                (class **WHAT-GOES-HERE**)
                getProtectionDomain
                getCodeSource
                getLocation)
              "!/META-INF/MANIFEST.MF"))))
      getMainAttributes)
    "Build-number"))
Run Code Online (Sandbox Code Playgroud)

谢谢.

clojure manifest

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