小编hca*_*d57的帖子

了解差异列表

我正在尝试理解Prolog中的差异列表,但我正在努力实际实现一个,每次我尝试这样做,我得到一个列表列表,但这不是我想要的.我正在尝试实现一个追加谓词,但到目前为止运气不佳.很少有尝试,所有这些都无效.

app(X, Y, Z) :- Z = [X|Y].

?- app([a,b,c], [z], Z).
Z = [[a,b,c],z].
Run Code Online (Sandbox Code Playgroud)

要么

app(X, Y, Z) :- Z = [X|Hole], Hole = Y.
Run Code Online (Sandbox Code Playgroud)

与第一个结果相同(它们看起来基本相同).我在一本有效的书中有一个例子(尽管它不是谓词),我不明白其中的区别.X实例化到正确答案[a,b,c,z],与第二个例子有什么不同?

X = [a,b,c|Y], Y = [z].
Run Code Online (Sandbox Code Playgroud)

我错过了什么?谢谢.

prolog difference-lists

14
推荐指数
2
解决办法
5794
查看次数

难以理解Java中的通配符

我很难理解Java泛型中的通配符.具体来说,我有以下问题:

  1. 如果我们有LinkedList<?>,为什么我们不能添加Object它?我明白它不知道列表的类型,但是不会Object在列表中添加一个在任何情况下都覆盖我们?

  2. 上述类似的问题,如果我们有LinkedList<? extends Number>,为何我们不可以add一个Number呢?

  3. 最后,如果我们有LinkedList<? super Number>,为什么我们addInteger到列表中,我们不应该只能够添加东西,都是数的超?

我想我正在试图理解通配符的工作方式,我已经阅读了关于它们的Oracle教程以及其他一些内容,但我不明白为什么它们可以正常工作.

java generics wildcard

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

主函数中**argv的表示法

可能重复:
main中的argc和argv

我很难理解用于一般主函数声明的符号,即int main(int argc, char *argv[]).我明白实际传递给main函数的是一个指向指针的指针char,但我觉得这个符号很难.例如:

为什么**argv指向第一个字符而不是整个字符串?同样,为什么*argv[0]指向与前一个示例相同的内容.

为什么*argv指向整个第一个字符串,而不是char像前一个例子那样的第一个字符串?

这有点无关,但是为什么*argv + 1指向一个字符串'减去第一个字符'而不是指向数组中的下一个字符串?

c program-entry-point argv argc

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

了解类型类声明中的类型参数

我在理解状态monad的情况下类型参数指示的内容时遇到了一些麻烦,但是对于其他mtl monad也是如此.在我理解的范围内,当我组成一个州立单体时,就像State String Int我所拥有的那样StateT String Identity Int.get对于MonadState类型类的方法,它返回m s,在这种情况下'm'是什么?它是Identity monad,Identity Int吗?在这种情况下,'s'表示状态的类型是'm'的参数?

谢谢,我显然在理解Haskell的类型系统时遇到了一些麻烦.

monads haskell typeclass

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