小编rep*_*eat的帖子

使用JavaScript新的Array(n)声明

基本的JavaScript问题:由于Java的情况没有硬限制(即IndexOutOfBoundsException),我们指定长度属性的声明的用途是什么?

var a = new Array(10);
Run Code Online (Sandbox Code Playgroud)

我知道它预定了长度并将"未定义"放入那些空白点.这个理由足够了吗?

javascript

48
推荐指数
4
解决办法
5万
查看次数

归因变量:库接口/实现/可移植性

当我撇了一些最近相关的问题,我偶然发现这个答案通过@mat质疑如何在Prolog中表示定向循环图,可直接通往邻居verticies.

到目前为止,我在Prolog中对属性变量的个人经验非常有限.但@mat给出的用例激发了我的兴趣.所以我尝试用它来回答另一个问题,用约束逻辑编程排序列表.

首先,好消息:我第一次使用归因变量就像我想要的那样.

然后,不是那么好的消息:当我通过回答发布时,我意识到在Prolog中有几个API和属性变量的实现.

我觉得我在这里过头了......特别是我想知道以下内容:

  • 什么API广泛使用?到目前为止,我发现了两个:SICStus和SWI.
  • 不同的属性变量实现提供哪些功能?同样的?或者一个包含另一个?
  • 语义上有差异吗?
  • 实际实施怎么样?有些比其他人更有效吗?
  • 可以(或是)使用属性变量进行可移植性问题吗?

很多问号,这里......请分享你的经验/立场?先感谢您!


编辑2015-04-22

这是上面提到的答案的代码片段:

init_att_var(X,Z) :-
    put_attr(Z,value,X).

get_att_value(Var,Value) :-
    get_attr(Var,value,Value).
Run Code Online (Sandbox Code Playgroud)

到目前为止,我"只"使用put_attr/3get_attr/3,但是 - 根据SICStus Prolog文档中的属性变量--- SICStus提供put_attr/2get_attr/2.

因此,即使是非常浅的用例也 需要一些仿真层(一种方式或另一种方式).

prolog

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

Prolog约束处理:包装正方形

我正在尝试解决prolog中的约束处理问题.

我需要在10x10的网格中打包4个5x5,4x4,3x3和2x2的正方形.它们可能不重叠.

我的变量看起来像这样:

Name: SqX(i), i=1..10, domain: 1..10
Run Code Online (Sandbox Code Playgroud)

其中X是5,4,3或2.索引i表示行,域表示网格中的列.

我的第一个约束试图定义正方形的宽度和高度.我这样制定它:

Constraint: SqX(i) > SqX(j)-X /\ i>j-X, range: i>0 /\ j>0
Run Code Online (Sandbox Code Playgroud)

这样可能的点被约束在彼此的X行和列之内.然而,Prolog会停止这些约束并给出以下结果:

Adding constraint "(Sq5_I > Sq5_J-5) /\ (I>J-5)" for values:
        I=1, J=1, 
        I=1, J=2, 
        I=1, J=3, 
        I=1, J=4, 
        I=1, J=5, 
        I=1, J=6, 
=======================[ End Solutions ]=======================
Run Code Online (Sandbox Code Playgroud)

所以它停在那里,甚至没有检查其他方块.我的约束很可能太紧张,但我不明白为什么或如何.有什么建议?

constraints prolog sicstus-prolog clpfd clpb

36
推荐指数
3
解决办法
3356
查看次数

如何在ISO Prolog中定义(和命名)相应的安全术语比较谓词?

标准术语顺序(ISO/IEC 13211-1 7.2术语顺序)是在所有术语(包括变量)上定义的.虽然有很好的用途 - 想想实现setof/3,但这使得许多其他清洁和逻辑用途的内置插件在8.4 Term比较中声明性的噩梦与imps(命令式构造的简短形式)四处都有.8.4术语比较功能:

8.4术语比较

8.4.1(@ = <)/ 2,(==)/ 2,(\ ==)/ 2,(@ <)/ 2,(@>)/ 2,(@> =)/ 2.
8.4.2比较/ 3.
8.4.3 sort/2.
8.4.4 keysort/2.

举个例子,考虑一下:

?- X @< a.
true.
Run Code Online (Sandbox Code Playgroud)

这成功了,因为

7.2期限订单

命令term_precedes(3.181)定义
术语X术语是否在术语之前Y.

如果XY是相同的术语,则X term_precedes Y
Y term_precedes X都是假的.

如果XY有不同的类型:Xterm_precedes Y当且仅当该
类型X先于类型Y按以下顺序:
variablefloating point先于integer
先 …

sorting prolog iso-prolog prolog-dif

32
推荐指数
4
解决办法
934
查看次数

使Prolog目标的"确定性成功"明确

一些Prolog目标确定性成功的问题一次又一次地出现 - 至少 - 以下问题:

使用了不同的方法(例如,引发某些资源错误,或仔细查看Prolog toplevel给出的确切答案),但它们对我来说都有点不合适.

我正在寻找一种通用的,可移植的,符合ISO的方式来查明某些Prolog目标(成功)的执行是否会留下一些选择点.有些元谓词,也许?

你能否向我提示正确的方向?先感谢您!

prolog

29
推荐指数
1
解决办法
877
查看次数

将任意大小的整数从Prolog传递到C.

现在,我正在学习如何使用C代码连接SICStus Prolog.

我想在SICStus Prolog版本4中使用/使用/查看任意大小的整数的"汉明重量"的C实现.

在我看来,我需要C函数来测试术语类型(SP_is_integer)和C函数来访问Prolog术语(SP_get_integer,SP_get_integer_bytes).

但是,我不确定如何以便携,健壮的方式使用SP_get_integer_bytes.你能指点一些精心设计的C代码做到这一点吗?

c prolog ffi sicstus-prolog integer-arithmetic

25
推荐指数
1
解决办法
382
查看次数

字符串列表的最长公共前缀(LCP)

lcs([ H|L1],[ H|L2],[H|Lcs]) :-
    !,
    lcs(L1,L2,Lcs).
lcs([H1|L1],[H2|L2],Lcs):-
    lcs(    L1 ,[H2|L2],Lcs1),
    lcs([H1|L1],    L2 ,Lcs2),
    longest(Lcs1,Lcs2,Lcs),
    !.
lcs(_,_,[]).

longest(L1,L2,Longest) :-
    length(L1,Length1),
    length(L2,Length2),
    (  Length1 > Length2
    -> Longest = L1
    ;  Longest = L2
    ).
Run Code Online (Sandbox Code Playgroud)

到目前为止这是我的代码.我怎样才能优化它以便打印前缀,例如:

["interview", "interrupt", "integrate", "intermediate"]
Run Code Online (Sandbox Code Playgroud)

应该回来 "inte"

Prolog有点生疏,有一段时间没做过:)

list prolog prolog-cut prolog-dif logical-purity

19
推荐指数
4
解决办法
1184
查看次数

如何连接两个原子/字符串?

我试图找出如何连接两个原子:

A = 'my ', 
B = 'atom',
Run Code Online (Sandbox Code Playgroud)

如何连接这两个原子,结果如下:

'my atom'
Run Code Online (Sandbox Code Playgroud)

prolog

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

第一个参数索引

我想知道在各种Prolog实现上如何实现智能的第一个参数索引.

特别是,简单的类型测试目标,例如integer/1在"颈部"条款之后,可以有助于更好的索引.考虑:

foo(h(X),X).
foo([],nil).
foo([_|_],cons).
foo(X,Y) :- integer(X), Y = n(X).
Run Code Online (Sandbox Code Playgroud)

通过这个子句排序,我希望目标foo([],_)能够成功而不会留下任何无用的选择点.

不幸的是,SWI Prolog没有弄明白:

?- length(Xs,10),
   maplist(=([]),Xs),
   statistics(trailused,T1),
   maplist(foo,Xs,Ys),
   statistics(trailused,T2).

T1 = 5792,
T2 = 5968,
Xs = [[], [], [], [], [], [], [], [], [], []],
Ys = [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] ...
Run Code Online (Sandbox Code Playgroud)

其他Prolog实现做得更好吗?

indexing prolog

18
推荐指数
2
解决办法
732
查看次数

建议Prolog处理器使用大页面

是否有任何Prolog实现支持使用大页面(每个内存页2MB/4MB)而不是vanilla 4Kb内存页.

理想情况下,我想向解释器/编译器/运行时声明,对于某些特定应用程序,可以将X大页面用于各种堆/堆栈/暂存器内存.

当然,并非所有应用程序都可以从中受益,但我确信不止一些应用程序会受益.毕竟,兆字节是新的千字节 :)

performance prolog virtual-memory tlb huge-pages

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