最近进入Prolog我已经将它用于一些简单的任务,并开始怀疑在forall循环中使用成员,如下面的简单示例中的那个:
forall(member(A,[1,2,3,4]), print(A)).
Run Code Online (Sandbox Code Playgroud)
如果您执行类似这样的操作,那么forall每次调用时都会以相同的顺序处理列表中的元素吗?是否必须通过执行以下操作来强制执行:
A = [1,2,3,4], sort(A, B), forall(member(C,B), print(C)).
Run Code Online (Sandbox Code Playgroud)
从我最初做的小研究中我猜测它归结为member/2的行为,但SWI-Prolog网站上的功能文档非常简短.然而它确实提到了关于成员/ 2的确定性,这给了我一个暗示,我可能正在说道,它总是以相同的顺序提取元素,尽管我很不确定.
有人能给我任何保证或解释吗?
使用您向其发送请求的 API 处理一个小项目,然后它会返回一个带有 zip 文件的响应,然后您可以下载该文件。我第一次自动下载时尝试使用 setopt(curl.WRITEDATA, fp) 函数,但每次尝试都会使我的 Python 脚本崩溃。然后我改变了策略并使用 WRITEFUNCTION 将数据写入缓冲区,然后将其写入一个始终正常工作的文件。
这一切都很好,但后来我想添加一个进度条来查看下载了多少文件并提供一些用户反馈等。这就是事情开始变得奇怪的地方,因为现在进度条在一秒钟内达到 100%并且 zip 文件尚未完成下载。当我将进度函数更改为仅打印正在下载的文件的大小时,它会报告大约 100 字节的数量(远小于 zip 文件)。无论如何使用pycurl(和下面的curl)中的函数来跟踪附件下载的进度而不是请求本身?
此外,如果有人可以帮助解决也可能有帮助的 WRITEDATA 问题,我想这两个问题可能是相关的。