小编use*_*928的帖子

什么类型的系统可以防止逻辑语言中的目标暂停?

咖喱教程的 3.13.3节:


剩余的操作称为刚性操作,而缩小的操作称为灵活操作.所有已定义的操作都是灵活的,而大多数基本操作(如算术运算)都是严格的,因为猜测对它们来说不是一个合理的选择.例如,prelude定义了一个列表连接操作,如下所示:

infixr 5 ++
...
(++)             :: [a] -> [a] -> [a]
[]       ++ ys   = ys
(x:xs) ++ ys     = x : xs ++ ys
Run Code Online (Sandbox Code Playgroud)

由于操作"++"是灵活的,我们可以使用它来搜索满足特定属性的列表:

Prelude> x ++ [3,4] =:= [1,2,3,4]       where x free
Free variables in goal: x
Result: success
Bindings:
x=[1,2] ?
Run Code Online (Sandbox Code Playgroud)

另一方面,诸如加"+"之类的预定义算术运算是刚性的.因此,使用逻辑变量作为参数的"+"调用flounders:

Prelude> x + 2 =:= 4 where x free
Free variables in goal: x
*** Goal suspended!
Run Code Online (Sandbox Code Playgroud)

库里似乎没有防止写入将被暂停的目标.什么类型的系统可以提前检测到目标是否会被暂停?

type-systems logic-programming curry

23
推荐指数
1
解决办法
689
查看次数

如何确定ghc为什么要查找特定类型类实例?

当条件类型类实例运行得很深时,可能很难弄清楚为什么ghc抱怨缺少类型类实例.例如:

class MyClass1 c
class MyClass2 c
class MyClass3 c

data MyType1 a
data MyType2 a

instance MyClass1 a => MyClass2 (MyType1 a)
instance MyClass2 a => MyClass3 (MyType2 a)

foo :: (MyClass3 c) => c
foo = undefined

bar :: MyType2 (MyType1 Int)
bar = foo
Run Code Online (Sandbox Code Playgroud)

GHC给出以下错误:

Example.hs:149:7-9: error:
    • No instance for (MyClass1 Int) arising from a use of ‘foo’
    • In the expression: foo
      In an equation for ‘bar’: bar = foo
    |
149 | bar = …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass ghc

20
推荐指数
1
解决办法
155
查看次数

如何在安装时在maven中自动运行findbugs

findbugs插件添加到maven 很容易,这样就可以运行了

mvn site
Run Code Online (Sandbox Code Playgroud)

但是,我希望它能随时运行

mvn install
Run Code Online (Sandbox Code Playgroud)

就像单元测试一样.也就是说,如果findbugs发现任何错误,我不希望安装成功.我有办法做到这一点吗?

java maven-2 findbugs

17
推荐指数
1
解决办法
8518
查看次数

查询矩形集合以查找输入矩形的重叠

在多维空间中,我有一组矩形,所有矩形都与网格对齐。(我宽松地使用“矩形”这个词 - 在三维空间中,它们将是矩形棱柱。)

我想查询此集合中与输入矩形重叠的所有矩形。

保存矩形集合的最佳数据结构是什么?我会不时地向集合中添加矩形或从集合中删除矩形,但这些操作并不频繁。我想要快速的操作是查询。

一种解决方案是将矩形的角保留在列表中,并对列表进行线性扫描,查找哪些矩形与查询矩形重叠,并跳过不重叠的矩形。

但是,我希望查询操作比线性更快。

我研究过R 树数据结构,但它保存的是点的集合,而不是矩形的集合,而且我没有看到任何明显的方法来概括它。

我的矩形的坐标是离散的,以防您发现有帮助。

我对通用解决方案感兴趣,但我也会告诉您我的具体问题的属性:我的问题空间具有三个维度,并且它们的多重性变化很大。第一个维度有两个可能的值,第二个维度有 87 个值,第三个维度有 180 万个值。

algorithm search geometry data-structures

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

将验证算法转换为SAT问题的编译器

SAT是NP完全的证明是一个建设性的证明,因此应该可以将它作为一个程序来实现.有没有人这样做过?

我正在寻找一个程序(编译器),它将一个程序(返回true或false)作为输入,并输出一个SAT公式.

因此,例如,编译器可以采用以下程序(以pythonic语法显示,但任何语言都适合我)作为输入,并输出SAT公式.将SAT公式提供给SAT求解器将给出参数"证书"的解决方案.在这种情况下,解决方案将是[False,True,True,True,False],表明{-3,-2,5}是一个解决方案.

def verify(certificate):
  problem = [-7, -3, -2, 5, 8]
  sum = 0
  for (x, b) in zip(problem, certificate):
    if b:
      sum += x
  return sum == 0
Run Code Online (Sandbox Code Playgroud)

显然,输出SAT公式将具有其他辅助变量,因此编译器必须指示哪些变量对应于证书.

这样的编译器已经存在吗?他们中的任何一个都是开源的?

compiler-construction np-complete satisfiability

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