小编Gon*_*era的帖子

关于 Prolog 中复杂术语的概念问题

我刚刚在大学开始学习 Prolog,我有一个概念问题,我没有找到任何具体的答案:

我想内化这种语言的“哲学”,所以我想非常准确地理解复杂术语(或复合术语)是什么。到目前为止,我已经读到复杂的术语是函子并且它是元数。我可以使用这样的复杂术语构建知识库:

love(john, sarah).
Run Code Online (Sandbox Code Playgroud)

假设现在我可以输入任何可能的字符串对作为“love”的参数,除非该字符串对是“john,sarah”,否则它将为假。是的,所以函子及其参数的“问题”是对还是错,取决于我是否在我的知识库中明确说过这一点,或者 Prolog 是否可以使用规则、统一等从他拥有的信息中推断出它。

是的,从这里开始,我明白一个复杂的术语表示 n 个实体之间的关系是true 或 false。我不明白的是:

vertical(line(point(X,Y),point(X,Z))).
Run Code Online (Sandbox Code Playgroud)

我明白什么是(X,Y)。做。也就是说,任何实体都通过“点”与任何其他实体相关。我不明白的是点(X,Y)如何可以作为线的参数!到目前为止,一个复杂的术语只是表示实体是否相关。我可以理解这是一个“传统函数”,如果实体相关则返回 true 或 false。但这怎么能成为 line 的论证呢?理论上,“line”有 2 个参数(实体),它会说明它们是否相关。现在,参数的值是 true 还是 false?

我可以理解“点(X,Y)”正在创建一个对象“点”。所以线的参数是一个“点实体”。但这不是我到目前为止所读到的有关复杂术语的内容,所以我希望有一个技术定义来解释嵌套的情况。

(如果我使用了错误的术语或定义,我很抱歉,我是 Prolog 新手)

谢谢!

prolog

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

MediaMetadataRetriever getFrameAtTime:videoframe是一个空指针

我试图获取一个视频帧,所以我使用MediaMetadataRetriever.getFrameAtTime(),如下所示:

    Uri directorio = Uri.parse("android.resource://com.extremeye/" + R.raw.video);
    media = new MediaMetadataRetriever();
    media.setDataSource(this, directorio);

    frame = (ImageView)findViewById(R.id.frame);
    Bitmap bmFrame = media.getFrameAtTime();
    frame.setImageBitmap(bmFrame);
Run Code Online (Sandbox Code Playgroud)

但问题是我得到:

MediaMetadataRetriever getFrameAtTime:videoframe是一个空指针

在logCat中.

我确定该视频与Android操作系统兼容并且MediaMetadataRetriever加载它,因为我可以在2.3.3操作系统版本中获得其元数据描述而没有问题.

我不知道为什么我不能得到框架,但如果我使用4.2操作系统版本,它的工作完美.我试图改变编解码器和视频的格式,但它不起作用......我想这是格式兼容性的问题,但我不知道我能做什么...

谢谢!!

media android frame null-pointer

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

了解Prolog中的递归性

我有这个例子:

descend(X,Y)  :-  child(X,Y). 
descend(X,Y)  :-  child(X,Z), descend(Z,Y).

child(anne,bridget). 
child(bridget,caroline). 
child(caroline,donna). 
Run Code Online (Sandbox Code Playgroud)

它工作得很好,我理解它.这是一个小练习的解决方案.我的解决方案是一样的,但改变了:

下降(X,Y): - 下降(X,Z),下降(Z,Y).

也就是说,改变childdescend第二descend规则.

如果我descend(X, Y).在第一个解决方案中查询,我获得:

?- descend(X, Y).
X = anne,
Y = bridget ;
X = bridget,
Y = caroline ;
X = caroline,
Y = donna ;
X = anne,
Y = caroline ;
X = anne,
Y = donna ;
X = bridget,
Y = donna ;
false.
Run Code Online (Sandbox Code Playgroud)

哪个是对的.但如果我用我的解决方案查询相同,我得到:

?- descend(X, Y).
X = anne,
Y …
Run Code Online (Sandbox Code Playgroud)

prolog failure-slice

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

从C ++中的矢量继承类调用super operator ==

我正在尝试实现从vector继承的类的比较运算符。

我希望它先比较自己的新属性,然后再使用从vector继承的运算符。这是一个例子:

struct A : vector<int> {
    int a;
    bool operator==(const A& other) {
        return a == other.a && vector::operator==(other);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

no member named 'operator==' in 'std::__1::vector<int, std::__1::allocator<int> >'
Run Code Online (Sandbox Code Playgroud)

与STL中其他类的结果相同,但如果我从自己的另一个类继承,则效果很好。

这是我正在使用的vector的实现:

inline _LIBCPP_INLINE_VISIBILITY
bool
operator==(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y)
{
    const typename vector<_Tp, _Allocator>::size_type __sz = __x.size();
    return __sz == __y.size() && _VSTD::equal(__x.begin(), __x.end(), __y.begin());
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

c++ inheritance vector operator-overloading

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

堆中的向量与堆栈中的向量

以下是否正确?

"堆中的向量(带sbrkmalloc)从低地址开始,然后变为高地址".

例如:

int *vec = sbrk(5*sizeof(int)):
Run Code Online (Sandbox Code Playgroud)

vec[0]在地址中0x500并且vec[1]0x504.

但是在堆栈中,int vec[5]从高地址到低地址.

例如:

  • vec[0] 在... 0xFF8
  • vec[1]0xFF4.

这样对吗?

c heap stack vector

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

检测已安装的应用

我能否知道如果手机中以编程方式安装了特定的应用程序?我的应用程序会以某种方式或其他方式进行处理.我怎么能得到这些信息?

谢谢!!

android detect package

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