如何在Clojure中进行相互递归定义?
下面是Scala中的代码,用于查找使用递归定义的素数:
val odds: Stream[Int] = cons(3, odds map { _ + 2 })
val primes: Stream[Int] = cons(2, odds filter isPrime)
def primeDivisors(n: Int) =
primes takeWhile { _ <= Math.ceil(Math.sqrt(n))} filter { n % _ == 0 }
def isPrime(n: Int) = primeDivisors(n) isEmpty
primes take 10
Run Code Online (Sandbox Code Playgroud)
我把它翻译成Clojure:
(def odds (iterate #(+ % 2) 3))
(def primes (cons 2 (filter is-prime odds)))
(defn prime-divisors [n]
(filter #(zero? (mod n %))
(take-while #(<= % (Math/ceil (Math/sqrt n)))
primes)))
(defn …Run Code Online (Sandbox Code Playgroud) 连字是Unicode字符,由多个代码点表示.例如,在Devanagari中???是一个由代码点组成的连字? + ? + ?.
在简单的文本文件编辑器中看到,如记事本,???显示为?? + ?并存储为三个Unicode字符.但是,当在Firefox中打开相同的文件时,它会显示为正确的连字.
所以我的问题是,如何从我的代码中读取文件时以编程方式检测此类连字.自从Firefox成功以来,必须有一种以编程方式完成它的方法.是否有任何包含此信息的Unicode属性,或者我是否需要有所有此类连字的映射?
text-rendering设置为SVG CSS属性时optimizeLegibility做同样的事情(将代码点组合成适当的连字).
PS:我正在使用Java.
编辑
我的代码的目的是计算Unicode文本中的字符,假设连字是一个单一字符.所以我需要一种方法将多个代码点折叠成一个连字.
多年前,我曾经设计过JavaScript禁用的浏览器.现在有多重要?
这真的是你需要担心的吗?我从来没有遇到过禁用JavaScript的现实生活中的用户.有人得到任何数字?
我对ROR很新.我有一项任务要完成:
这是模型:
class File::DataImport < ActiveRecord::Base
attr_accessible :created_by, :file_name, :file_source, :updated_at, :updated_by
end
Run Code Online (Sandbox Code Playgroud)
这是控制器:
class Files::DataImportsController < ApplicationController
def index
end
def new
end
end
Run Code Online (Sandbox Code Playgroud)
而我的观点是index和new.
我想要一个字段来上传数据.数据应存储在服务器中,并将文件路径保存到指定列的数据库中file_name.该路径应默认为所有上传文件.
我被困在如何开始.请帮我找到解决方案,我将从中学习.
提前致谢.
到目前为止我所知道的是,如果重写超类方法,子类应抛出相同的异常或异常的子类.
例如:
这是对的
class SuperClass {
public int doIt(String str, Integer... data)throws ArrayIndexOutOfBoundsException{
String signature = "(String, Integer[])";
System.out.println(str + " " + signature);
return 1;
}
}
public final class SubClass extends SuperClass {
public int doIt(String str, Integer... data) throws ArrayIndexOutOfBoundsException {
String signature = "(String, Integer[])";
System.out.println("Overridden: " + str + " " + signature);
return 0;
}
public static void main(String... args) {
SuperClass sb = new SubClass();
try {
sb.doIt("hello", 3);
} catch (Exception e) …Run Code Online (Sandbox Code Playgroud) 我有一个程序来处理非常大的文件.现在我需要显示一个进度条来显示处理的进度.该程序在单词级别上工作,一次读取一行,将其拆分为单词并逐个处理单词.因此,当程序运行时,它知道处理的单词的数量.如果它以某种方式预先知道文件的字数,它可以很容易地计算进度.
问题是,我正在处理的文件可能非常大,因此处理文件两次不是一个好主意,一次得到总字数,然后是运行实际处理代码.
所以我试着编写一个代码,通过读取文件的一小部分来估算文件的字数.这就是我提出的(在Clojure中):
(defn estimated-word-count [file]
(let [^java.io.File file (as-file file)
^java.io.Reader rdr (reader file)
buffer (char-array 1000)
chars-read (.read rdr buffer 0 1000)]
(.close rdr)
(if (= chars-read -1)
0
(* 0.001 (.length file)
(-> (String. buffer 0 chars-read) tokenize-line count)))))
Run Code Online (Sandbox Code Playgroud)
此代码从文件中读取前1000个字符,从中创建一个String,对其进行标记以获取单词,对单词进行计数,然后通过将文件的长度乘以文件的长度并将其除以1000来估计文件的单词计数.
当我在带有英文文本的文件上运行此代码时,我得到几乎正确的字数.但是,当我在一个带有印地文文本(用UTF-8编码)的文件上运行它时,它几乎返回真实字数的两倍.
我知道这个问题是因为编码.那么有什么方法可以解决它吗?
解
正如Frank建议的那样,我确定前10000个字符的字节数,并用它来估计文件的字数.
(defn chars-per-byte [^String s]
(/ (count s) ^Integer (count (.getBytes s "UTF-8"))))
(defn estimate-file-word-count [file]
(let [file (as-file file)
rdr (reader file)
buffer (char-array 10000)
chars-read (.read rdr buffer 0 10000)] …Run Code Online (Sandbox Code Playgroud) 我现在很好地学习Scala并非常享受它; 我希望在其中开始未来的项目,而不是Java.我更少享受的是(相对)糟糕的IDE支持.我发现IDEA和Eclipse都带有Scala插件(包括夜间版本)有点不可靠或难以使用 - 我想要一些我总能依赖的东西.例如,昨天我无法全新安装eclipse +插件来运行我的测试,甚至打开一个编辑器窗口!
我正在考虑在Eclipse/IDEA之间跳跃,这取决于最适合手头的任务,更重要的是减少我对构建和运行测试的IDE的依赖(ScalaTest).这对我来说非常重要,因为我在Eclipse中长大了Java; 让Eclipse SVN使用GIT最初是一件大事.鉴于我只有时间学习一个工具,它应该是Ant,Maven,buildr,sbt,.... 其他人如何工作?
我在我的应用程序中使用Spring框架(2.5.4)加载时间编织并且一切正常(在Spring bean中,在非Spring实体中),除非我尝试在注释为@Configurable的servlet中自动装配字段,然后我得到一个很好的NullPointerException ...
@Configurable(dependencyCheck=true)
public class CaptchaServlet extends HttpServlet{
@Autowired
private CaptchaServiceIface captchaService;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
// ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
// captchaService = (CaptchaServiceIface) ctx.getBean("captchaService");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Captcha c = captchaService.getCatpcha();
req.getSession().setAttribute("captchaAnswer", c.getAnswer());
resp.setContentType("image/png");
ImageIO.write(c.getImage(), "png", resp.getOutputStream());
}
}
Run Code Online (Sandbox Code Playgroud)
<context:load-time-weaver/>
<context:spring-configured/>
<context:component-scan base-package="cz.flexibla2" />
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何建议?
谢谢.
是否可以在 JPA 中进行跨数据库表连接?
我users在一个数据库中有一个表,它有organizations一个单独数据库中表的外键。两个数据库都在同一台物理机器上。现在 MySQL 允许我编写跨越多个数据库的查询,但我不确定如何使用 JPA 来做到这一点。
在@Entity对Java POJO的注解,也没有办法,以纪念跨DB关系不采取数据库的名称。
这种情况有解决方法吗?也许使用本机查询来加载加入的实体?
我有一个启用 JMX 的 Java 应用程序 (Java 1.5),位于 HTTP 代理服务器后面。所以我无法直接通过 JConsole 访问它。
我想象的一个解决方案是在我的应用程序中有一个虚拟机内 JMX 客户端,它从 JMX 服务器收集统计信息和配置数据,并通过代理定期通过 HTTP 将其发布到我的外部服务器。如果需要,我的外部服务器会回复任何配置更改,并且 VM 内 JMX 客户端会将这些更改传播到 JMX 服务器,然后将这些更改应用到应用程序。
我猜想这种情况足够频繁,以至于已经有解决方案解决它。是否有任何帮助框架/库可以通过 HTTP 实现此类访问?
java ×5
clojure ×3
ant ×1
autowired ×1
build ×1
buildr ×1
coding-style ×1
database ×1
definition ×1
exception ×1
javascript ×1
jmx ×1
jpa ×1
jpa-2.0 ×1
large-files ×1
ligature ×1
maven-2 ×1
mysql ×1
overriding ×1
polymorphism ×1
proxy-server ×1
recursion ×1
ruby ×1
scala ×1
servlets ×1
spring ×1
standards ×1
text ×1
unicode ×1