小编Sam*_*ami的帖子

用于Java的嵌入式Prolog解释器/编译器

我正在开发一个Java应用程序,它需要做一些复杂的逻辑规则推导作为其功能的一部分.我想在Prolog或其他逻辑/约束编程语言而不是Java中编写我的逻辑演绎编码,因为我相信生成的代码将更加简单和易于维护.

我在Prolog上搜索了嵌入式Java实现,并发现了它们的数量,每个都只有很少的文档.我的(适度)选择标准是:

  • 应该可以嵌入Java(例如,可以与我的java包捆绑在一起,而不需要在外部程序上进行任何本机安装)
  • 从Java使用的简单接口(用于启动扣减,检查结果和添加规则)
  • 至少有一些关于如何使用它的例子
  • 不一定必须是Prolog,但具有上述标准的其他逻辑/约束编程语言也适合我的需要.

我有什么选择,它们的优点和缺点是什么?

java prolog logic-programming embedded-language constraint-programming

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

编程中分形的实际应用

分形对我来说一直是个谜.

在各种编程问题领域中,分形有哪些实际用途(除了渲染到漂亮的图像之外)?请不要只列出使用它们的区域.我对特定的算法感兴趣,以及如何将分形与这些算法一起用来在实践中解决某些问题.请至少给出算法的简短描述.

random algorithm math fractals

34
推荐指数
2
解决办法
6576
查看次数

第N组合

是否有直接的方法来获得nCr的所有组合的有序集合的第N个组合?

示例:我有四个元素:[6,4,2,1].通过一次取三个所有可能的组合将是:[[6,4,2],[6,4,1],[6,2,1],[4,2,1]].

有没有一个算法可以在有序的结果集中给出我的第三个答案,[6,2,1],而不需要列举所有以前的答案?

math statistics probability combinatorics

14
推荐指数
3
解决办法
4849
查看次数

控制OSX窗口

我正在尝试从我的应用程序控制外部OSX应用程序的窗口.我想1.移动屏幕上的窗口2.调整屏幕上的窗口大小3.更改应用程序的当前活动窗口4.获取当前活动的窗口.

(我想通过ObjC/C/C++ apis这样做).

考虑到我有想要控制的窗口的CGWindowID,我应该寻找什么样的API调用?也就是说,我希望找到的功能与类似的东西签名:MoveWindow(CGWindowID winId, int x, int y),ResizeWindow(CGWindowID winId, int width, int height),Activatewindow(CGWindowID winId),CGWindowID GetCurrentlyActivatedWindow().

对于3,我已经习惯SetFrontProcess将一个进程拉到前面,但是这不允许我选择一个进程的特定窗口,如果它有多个.

macos cocoa macos-carbon objective-c

12
推荐指数
1
解决办法
4679
查看次数

基于DFA的Java正则表达式引擎与Capture

是否有任何(免费)Java正则表达式引擎,可以将正则表达式编译为DFA,并在匹配DFA时进行组捕获?

我找到了dk.brics.automaton和jrexx,它们都编译成DFA,但似乎都无法进行群组捕获.虽然我发现的其他引擎似乎编译为NFA.

java regex dfa

10
推荐指数
1
解决办法
5218
查看次数

如何在Java中创建叠加窗口?

我正在尝试为外国应用程序创建HUD样式显示.

为此,我需要创建一个透明的覆盖窗口,它将放置在外部应用程序的窗口之上.叠加窗口应该允许我放置小部件并在其上绘制文本.事件应该转发到底层窗口,如果它们发生在透明区域上(否则允许窗口小部件按预期工作).

我在OSX上用Java做这个.我希望用纯Java实现这一点,并且可以移植到其他平台,但是如果不可能的话,我可以使用只允许我通过Cocoa(Rococoa)或Carbon在OSX上执行此操作的解决方案.

java macos cocoa swing overlay

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

维护JTextArea滚动位置

我有一个JSCrollPane,其中JTextArea设置为其视图端口.

我连续更新JTextArea上显示的(多行)文本大约每秒一次.每次文本更新时,JScrollPane都会一直到文本的底部.

相反,我想弄清楚当前显示为原始文本中第一行的行号,并将该行作为文本更新后显示的第一行(或者如果新文本没有那么多行,然后一直滚动到底部).

我这样做的第一次尝试是获取当前插入位置,根据该位置计算线条,然后设置文本区域以显示该行:

    int currentPos = textArea.getCaretPosition();
    int currentLine = 0;
    try {
        for(int i = 0; i < textArea.getLineCount(); i++) {
            if((currentPos >= textArea.getLineStartOffset(i)) && (currentPos < gameStateTextArea.getLineEndOffset(i))) {
                currentLine = i;
                break;
            }
        }
    } catch(Exception e) { }

    textArea.setText(text);

    int newLine = Math.min(currentLine, textArea.getLineCount());
    int newOffset = 0;
    try {
        newOffset = textArea.getLineStartOffset(newLine);
    } catch(Exception e) { }

    textArea.setCaretPosition(newOffset);
Run Code Online (Sandbox Code Playgroud)

这几乎可以满足我的需求,但要求用户在文本区域内单击以更改插入位置,以便滚动将保持状态(这不是很好).

我如何使用(垂直)滚动位置来代替?

java user-interface swing

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

数据集中的组检测

假设一组数据点,例如此处绘制的数据点(此图不是特定于我的问题,而只是用作一个合适的例子):

可视化地检查散点图,很明显数据点形成两个"组",其中一些随机点显然不属于任何一个.

我正在寻找一种算法,这将允许我:

  • 从两个或多个维度的数据集开始.
  • 从数据集中检测此类组,而无需事先知道可能存在多少(或者如果有)
  • 一旦检测到组,如果新的样本点似乎适合任何组,则"询问"组的模型

algorithm statistics probability feature-detection

7
推荐指数
1
解决办法
1591
查看次数

来自AXUIElement的CGWindowID

我正在尝试使用辅助功能API自动化外部OSX应用程序.应用程序的某些状态不能通过API获得,因此我通过屏幕抓取获取它.为此,我需要为具有"窗口角色"的辅助功能对象获取CGWindowID.

有没有直接的方法来获取"窗口角色"可访问性对象的CGWindowID?通过匹配窗口的各种属性,例如大小,标题和位置,我可以启发式地获得它,但这真的很糟糕,如果我的应用程序也支持极端情况我会感觉更好,即使它们不太可能.

macos cocoa automation macos-carbon

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

libdtrace 缓冲输出

我正在尝试通过 libdtrace 使用 dtrace(在 Snow Leopard 上;10.6.4)。我想在我自己的程序中捕获我的 dtrace 脚本的打印输出。一种方法是将输出转到临时文件并从那里读取。但是,libdtrace 支持回调函数来直接捕获我更喜欢的输出。

我认为回调只会传递我可以使用的格式化字符串,但情况似乎并非如此。例如,在下面的测试程序中,我希望打印输出为“process pid = 86138”。但是,它总是打印出“process pid = 1”(当使用 'dtrace -n' 运行时,dtrace 脚本工作正常)。

我究竟做错了什么 ?我应该如何使用传递给缓冲区处理程序的数据?(具体来说,来自 printf 和 tracemem 操作的数据是我感兴趣的)。

#include <dtrace.h>
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach.h>
#include <mach-o/loader.h>
#include <mach-o/dyld.h>
#include <mach-o/fat.h>
#include <sys/sysctl.h>
#include <signal.h>

static const char *g_prog =
  "pid86138::write:entry"
  "{"
  "  printf(\"process pid = %d\\n\", pid);"
  "}";

static int dcmdbuffered(const dtrace_bufdata_t *bufdata, void *arg) {
  if((bufdata->dtbda_recdesc != NULL) && (bufdata->dtbda_recdesc->dtrd_action == DTRACEACT_PRINTF))
    printf("BUF: %s\n", bufdata->dtbda_buffered);

  return DTRACE_HANDLE_OK;
} …
Run Code Online (Sandbox Code Playgroud)

c debugging macos dtrace

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