小编cod*_*der的帖子

没有修改静态过程的权限(\ =)/ 2序言错误

我试图写一条规则来告诉“ A”何时可能成为“ B”的兄弟,但是我遇到了一个错误,一个警告是第一个错误说:no permission to modify static procedure (\= )/2 而警告说:Singleton variables [A,B]。我知道单例变量意味着该变量只能使用一次,但是我无法找到一种方法来修复代码,但是我不了解第一个错误,因为我是Prolog初学者,因此它可能恰好是我的一个愚蠢错误找不到。

 brother(A,B):-
    parent(X,A),
    parent(X,B),
    male(A).
 A \= B.
Run Code Online (Sandbox Code Playgroud)

compiler-errors prolog

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

使用随机数生成器的代码的 Big-O 是什么?

我想用 1 到 N 之间的随机值填充数组“a”(没有重复值)。假设 randInt(i, j) 的 Big-O 为 O(1),并且该函数生成从 i 到 j 的随机值。
输出示例如下:

{1,2,3,4,5} 或 {2,3,1,4,5} 或 {5,4,2,1,3} 但不是 {1,2,1,3,4}

#include<set>
using std::set;

set<int> S;// space O(N) ?
int a[N];  // space O(N)
int i = 0; // space O(1)
do {
    int val = randInt(1,N);   //space O(1), time O(1) variable val is created many times ?
    if (S.find(val) != S.end()) { //time O(log N)? 
        a[i] = val; // time O(1)
        i++; // time O(1)
        S.insert(val); // …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm big-o

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

Prolog:2 个数字的递归乘法

我不明白为什么这个乘法的递归定义有效。
我得到了添加部分,但是在这种情况下“A”的值如何。代码如下:

add(0,X,X).
add(s(X),Y,Z):-add(X,s(Y),Z).

mult(0,X,0).
mult(s(X),Y,Z):-mult(X,Y,A), add(Y,A,Z).
Run Code Online (Sandbox Code Playgroud)

prolog successor-arithmetics

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

找到两个分数的总和prolog

如何计算Prolog中两个分数的总和.让命名函数fracsum(X,Y,Z)x+y=z(x和y的级分,即得Z也如分数).

一些例子:fracsum(1/9,1/9,Z)结果Z=2/9fracsum(5/9,1/9,Z)结果Z=2/3(也得到最低的分数,而不是6/9得到2/3).

因为我是Prolog的初学者,所以任何帮助都会有用.

prolog fractions

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

仅在 protege 中使用关键字不会返回任何内容

我有一个类Movie,其中有像 2515159 这样的代表电影的实例,还有一个名为 的类Country,其中有像英国、美国、意大利、奥地利和其他国家这样的实例。我还有一个hasCountry与电影中的国家相匹配的角色,例如:

2515159 hasCountry Italy
2515159 hasCountry Austria
Run Code Online (Sandbox Code Playgroud)

(一部电影可以有多个国家)

现在的问题是: 我想创建一个MovienameEuropeanMovie,其中包含仅拥有欧洲国家的个人的实例。

在 protege 创建名为 EuropeanMovie 的 Movie 子类后,我尝试将“等效项”放置为:

Movie and hasCountry only {Austria,Italy, ...all the EU countries...}
Run Code Online (Sandbox Code Playgroud)

还尝试过:

  Movie
   and hasCountry some (
          {Austria,Italy, ...all the EU countries...}
          and   not  {USA, and other non EU countries...} )
Run Code Online (Sandbox Code Playgroud)

但是,上面仅使用关键字不会返回任何内容,而有仅包含欧盟国家的电影(如开头的示例)。

经过大量搜索后,我没有找到太多,但我认为这可能与猫头鹰的开放世界假设有关,但我不明白这一点。

如果有人能给任何建议,那将非常有帮助,谢谢!

owl ontology protege

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

为什么冒泡排序的时间复杂度被称为n平方?

关于冒泡排序时间复杂度还有其他问题,但这个问题不同。大家都说冒泡排序最坏情况是 O(n^2)。在列表 i 次迭代之后的冒泡排序中,列表的最后 i 个元素是有序的,不需要再次触摸或比较。如果你不必要地一次又一次地运行最终元素,时间复杂度只会是 O(n^2)。

鉴于冒泡排序的一个主要特征是(输入大小减去迭代)之后的元素永远不需要再次比较,因为它位于正确的位置,为什么冒泡排序的时间复杂度对我来说是这样的没想到是冒泡排序?即使在维基百科中,它也说时间复杂度是 O(n^2),然后在文章的中间才提到,通过不不必要地比较最后 i 个元素,可以“优化”到只花费大约 50% 的时间。

我想起了这一点,因为我正在制作一个循环来检查世界上所有对象的碰撞,并且我检查的模式是:

for (int i = 0; i < numberofobjects - 1; i++)
{
   {
      for (int iplusone = i + 1; iplusone < numberofobjects; iplusone++)
        // check collision between i and iplusone
   }
}
Run Code Online (Sandbox Code Playgroud)

对于 400 个对象,时间复杂度为 O(n^2) 400 * 400 = 160,000。然而它只进行了 79,800 次比较,大约是 50%,这正是维基百科所说的。这让我想起了冒泡排序,所以当我检查时,我惊讶地发现每个人都说它是 O(n^2)。

这是否意味着每当有人提到冒泡排序时,他们指的是不必要地重复已排序的最终元素的版本?此外,当比较不同的算法时,冒泡排序总是表现更差,但作者是否指的是明显糟糕的 n^2 版本?

c big-o bubble-sort time-complexity

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

列出Prolog中矩阵的对角线

我如何n*n在Prolog中获得一个大小矩阵的对角线列表?

预期行为:

?- diagonal1([[1,3,2],[4,5,7],[6,8,9]],D1). 
D1=[1,5,9]
?- diagonal2([[1,3,2],[4,5,7],[6,8,9]],D2). 
D2=[2,5,6].
Run Code Online (Sandbox Code Playgroud)

(我使用内置函数很好.)

list prolog

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

打印char的十进制值

用于打印char的十进制值的程序:

#include<stdio.h>

int main(void){

  char ch = 'AB';
  printf("ch is %d\n",ch);

}
Run Code Online (Sandbox Code Playgroud)

为什么打印第二个字符的十进制值,为什么不是第一个字符的十进制值?

输出: ch is 66

c

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

在Prolog中的元组列表中按降序排序

我想基于列表的第二个值按降序对元组列表进行排序,而不使用内置的排序谓词.

示例:(Name, Age).

unsorted_list = [(mary, 20), (jack, 50), (bob, 16), (bill, 20) ].

sorted_list = [(jack, 50), (bill, 20), (mary, 20), (bob, 16)].
Run Code Online (Sandbox Code Playgroud)

有谁知道这样做的优雅方式?

sorting list prolog

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

在Prolog中打印数字序列

我想在Prolog中创建一系列数字.因此,如果功能是print(4,3,10),它将打印4 7 10 13 16 19 22 25 28 31.第二个参数确定下一个数字,最后一个参数确定序列应停止的位置.

我有代码,但它似乎不起作用.

print(A,B,C) :- C>=0. print(A,B,C) :- D is A+B, E is C-1, print(D,B,E), write(D).

结果只显示true.

这个问题有什么解决方案吗?谢谢.

prolog

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

如何在一个批处理文件中编写多个cmd提示命令

我需要四个命令提示符命令才能在一个批处理文件中运行.它应该从上到下运行.命令是:

ipconfig /flushdns
ipconfig /release
ipconfig /renew
exit
Run Code Online (Sandbox Code Playgroud)

batch-file

-1
推荐指数
1
解决办法
2436
查看次数