小编Dan*_*ons的帖子

Haskell枚举器:模拟迭代`enumWith`运算符?

今天早些时候,我为iteratees编写了一个小型测试应用程序,该应用程序组成了一个iteratee,用于使用iteratee编写进度来实际复制数据.我结束了这样的价值观:

-- NOTE: this snippet is with iteratees-0.8.5.0
-- side effect: display progress on stdout
displayProgress :: Iteratee ByteString IO ()

-- side effect: copy the bytestrings of Iteratee to Handle
fileSink :: Handle -> Iteratee ByteString IO ()

writeAndDisplayProgress :: Handle -> Iteratee ByteString IO ()
writeAndDisplayProgress handle = sequence_ [fileSink handle, displayProgress]
Run Code Online (Sandbox Code Playgroud)

在查看枚举器库时,我没有看到类似的sequence_enumWith.我想要做的就是编写两个迭代,以便它们作为一个整体.我可以放弃结果(()无论如何)或保留它,我不在乎.来自Control.Arrow的(&&&)是我想要的,仅适用于迭代而不是箭头.

我试过这两个选项:

-- NOTE: this snippet is with enumerator-0.4.10
run_ $ enumFile source $$ sequence_ [iterHandle handle, displayProgress]
run_ $ …
Run Code Online (Sandbox Code Playgroud)

haskell enumerator

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

Prolog DCG:编写编程语言词法分析器

我正在尝试将我的词法分析器和解析器分开,基于Prolog和自然语言分析这本书的模糊建议,这本书并没有详细介绍lexing/tokenizing.所以我给它一个镜头,看到几个小问题向我表明我有一些明显的缺失.

我所有的小标记解析器似乎都正常工作; 目前,这是我的代码片段:

:- use_module(library(dcg/basics)).

operator('(')  --> "(".      operator(')')  --> ")".
operator('[')  --> "[".      operator(']')  --> "]".
% ... etc.

keyword(array)    --> "array".
keyword(break)    --> "break".
% ... etc.
Run Code Online (Sandbox Code Playgroud)

它有点重复,但似乎有效.然后我有一些我不太喜欢的东西,欢迎提出建议,但似乎有效:

id(id(Id)) -->
    [C],
    {
        char_type(C, alpha)
    },
    idRest(Rest),
    {
        atom_chars(Id, [C|Rest])
    }.
idRest([C|Rest]) -->
    [C],
    {
        char_type(C, alpha) ; char_type(C, digit) ; C = '_'
    },
    idRest(Rest).
idRest([]) --> [].

int(int(Int)) --> integer(Int).

string(str(String)) -->
    "\"",
    stringContent(Codes),
    "\"",
    {
        string_chars(String, Codes)
    }.
stringContent([C|Chars]) -->
    stringChar(C), stringContent(Chars).
stringContent([]) --> …
Run Code Online (Sandbox Code Playgroud)

prolog lexical-analysis dcg

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

使用Java EE 6进行计划的数据库维护(连接生命周期)

我是Java EE 6的新手,所以如果这个问题的答案显而易见,我会道歉.我有一个必须每小时运行一次从数据库重建Solr索引的任务.我还希望在部署应用程序时进行重建.我的直觉是这应该有效:

@Singleton
@Startup
public class Rebuilder {
  @Inject private ProposalDao proposalDao;
  @Inject private SolrServer  solrServer;

  @Schedule(hour="*", minute="0", second="0")
  public void rebuildIndex() {
    // do the rebuild here
  }
}
Run Code Online (Sandbox Code Playgroud)

因为我正在使用myBatis,所以我写了这个制作人:

public class ProposalSessionProvider {
  private static final String CONFIGURATION_FILE = "...";

  static {
    try {
      sessFactory = new SqlSessionFactoryBuilder().build(
        Resources.getResourceAsReader(CONFIGURATION_FILE));
    }
    catch (IOException ex) {
      throw new RuntimeException("Error configuring MyBatis: " + ex.getMessage(), ex);
    }
  }

  @Produces
  public ProposalsDao openSession() {
    log.info("Connecting to the database");
    session = sessFactory.openSession(); …
Run Code Online (Sandbox Code Playgroud)

ejb mybatis java-ee-6

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

C++ iostream 与 C stdio 性能/开销

我试图理解如何提高这个 C++ 代码的性能,使其与它所基于的 C 代码相提并论。C 代码如下所示:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct point {
  double x, y;
} point_t;

int read_point(FILE *fp, point_t *p) {
  char buf[1024];
  if (fgets(buf, 1024, fp)) {
    char *s = strtok(buf, " ");
    if (s) p->x = atof(s); else return 0;
    s = strtok(buf, " ");
    if (s) p->y = atof(s); else return 0;
  }
  else
    return 0;
  return 1;
}

int main() {
  point_t p;
  FILE *fp = fopen("biginput.txt", "r");

  int i …
Run Code Online (Sandbox Code Playgroud)

c++ performance iostream

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

Prolog:显示任意表达式的真值表,对于某些子表达式使用is/2

假设我有一些看起来像的表达式a /\ b \/ c.我想为此生成真值表,例如:

 a |  b |  c | a /\ b \/ c
---+----+----+-------------+-
 F |  F |  F | F
 F |  F |  T | T
 F |  T |  F | F
 F |  T |  T | T
 T |  F |  F | F
 T |  F |  T | T
 T |  T |  F | T
 T |  T |  T | T
Run Code Online (Sandbox Code Playgroud)

这里的一个关键思想是处理尚未处理的运算符is/2,例如逻辑含义->.顺便说一句,这个问题来自reddit用户 …

prolog expression-evaluation

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

Hibernate:从核心API切换到JPA API,无需重写映射

是否可以使用hbm xml Hibernate配置以符合JPA 2.0的方式构建EntityManagerFactory和EntityManager?文档似乎表明这是不可能的:

"之前的教程使用了特定于Hibernate的hibernate.cfg.xml配置文件.但是,JPA定义了一个使用自己的名为persistence.xml的配置文件的不同引导过程." - 第4章

我的hbm xml配置长达数千行并且可以工作; 我宁愿不必手动重写为orm.xml和persistence.xml.我也没有对数据模型的写访问权来添加Hibernate或JPA注释.出于我的目的,我只需要JPA API,而不是JPA配置.

有没有办法实现这个目标?

hibernate jpa-2.0

3
推荐指数
1
解决办法
1136
查看次数

使用Prolog:给定列表检查列表的第一个元素是否等于最后一个元素

使用prolog,我必须创建一个规则,在给定列表时,确定列表的第一个元素是否等于列表的最后一个元素.以下是我的想法.

The Base Cases:
1) If The Parameter Is Not A List: Return False
2) If The Parameter Is A List But Empty: Return False 
3) If The Parameter Is A List But Has One Element: Return False

The Recursive Step:
Recursively Going Through The List Getting The 
First Element And TheLast Element Then Compare

fela() :- false.                             <-- Base Case One
fela([]):-false.                             <-- Base Case Two
fela([H]):-false.                            <-- Base Case Three
fela([H|T]):- H1 is H, H1 == T, fela(T,H1). …
Run Code Online (Sandbox Code Playgroud)

recursion list prolog

3
推荐指数
1
解决办法
1万
查看次数

控制Prolog变量值选择

受到早期问题的启发,我试图实现一些能够枚举布尔表达式的可能性.但是,我在变量选择方面遇到了麻烦.这是我的预期结果:

?- eval(X^Y, R).
R = 0^0;
R = 0^1;
R = 1^0;
R = 1^1;
no.
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

:- op(200, yfx, ^).

split(V, R) :- var(V), R = 0.
split(V, R) :- var(V), R = 1.
split(X ^ Y, XP ^ YP) :- split(X, XP), split(Y, YP).
Run Code Online (Sandbox Code Playgroud)

即使对于这个简单的情况,这已经不能做我想要的了:

?- split(Y, R).
R = 0 ;
R = 1 ;
Y = _G269^_G270,
R = 0^0 ;
Y = _G269^_G270,
R = 0^1 ;
Y = _G269^ (_G275^_G276),
R …
Run Code Online (Sandbox Code Playgroud)

evaluation prolog

2
推荐指数
1
解决办法
82
查看次数

如何添加分离度?

在Prolog中,我如何制定一条规则来检查一个人的网络中有多少人,然后查询分离程度?

例如,如果在 Facebook 中我的名字是 John;我有一个朋友汤姆,汤姆有一个朋友露西,露西有一个朋友本,本有一个朋友乔什,乔什有一个朋友南希。

我想在 Prolog 中创建一条规则来测试我的网络中有多少人,并告诉 Prolog 返回达到给定分离度的名称。

例如,如果我查询类似的内容;

?- mynetwork(josh,2).
Run Code Online (Sandbox Code Playgroud)

Prolog 应该返回

  • 约翰
  • 汤姆
  • 露西

或者

  • 约翰是汤姆的朋友
  • 汤姆和露西是朋友

prolog

0
推荐指数
1
解决办法
331
查看次数