在 SWI(或任何)Prolog 中绘图

sne*_*lan 6 graphics drawing prolog

是否可以在 SWI prolog 中绘制形状?有 print 语句,但我还没有找到任何可以让我像 JavaScript 画布一样绘制矩形的东西。

Prolog 在概念上有能力做到这一点吗?

我问错问题了吗?

Eri*_*lun 2

Prolog 是一种通用的图灵完备编程语言,具有成熟的库,所以肯定是的。有不止一种方法可以做到这一点。除了简单地生成图像文件之外,还给您一些想法。

\n

您可以设置与托管CanvasSVG元素的网页的WebSocket连接,并向其发送绘图命令或包含 SVG 的 XML 块。这样,您就不必学习任何深奥的或特定于 Prolog 的绘图库,而是可以依赖 Canvas、SVG 和任何相关工具的全面丰富性和广泛使用,而功能齐全的 Prolog 可用于绘图的逻辑/结构。

\n

如果需要Prolog两边都可用,可以设置TauProlog在浏览器中网页可以包含自定义代码(vanilla JS 或 TauProlog)来处理传入的命令并翻译它们以应用于画布或 SVG 元素。如果需要,页面还可以反馈到后端,以便纯 Prolog 绘图逻辑可以检查屏幕上发生的情况。或者,您甚至可以合并交互式元素,例如反馈到绘图代码的按钮。

\n

通过在后端运行 Prolog,您可以利用.svgProlog 的任何或其他图像生成插件,例如 graphviz,然后将输出发送到网页以与 SVG 混合或渲染到画布中(Paper.js 可以导入.svg文件,见下文)。SVG 还允许嵌入完整的 HTML 元素甚至 HTML 内容块,这可用于添加支持元素或用于交互性。

\n

我不\xe2\x80\x99t知道任何开箱即用的工作示例(尽管我打算研究类似的东西),但你应该能够找到Prolog <-WS->浏览器的工作示例(甚至-> TauProlog)设置。当 TauProlog 在浏览器中运行时,Prolog 和渲染之间的某些类型的较重流量可以从 WS 连接卸载,以防绘图逻辑需要对循环期间渲染的内容进行一些繁重的检查。

\n

要使用开箱即用的光栅和矢量实用程序来使用画布,您可以使用Paper.js而不是普通的 Javascript 画布 API。

\n

您还可以在浏览器中运行完整的 SWI Prolog(编译为 WebAssembly),既可以独立执行,也可以作为后端运行的补充。请参阅https://github.com/SWI-Prolog/swipl-wasm(我自己还没有\xe2\x80\x99t 对此进行过测试)。

\n

让我补充一下,基于浏览器的 UI(应用程序)可以轻松打包为在本地工作的桌面应用程序,不知何故,您\xe2\x80\x99 只需要在其中隐藏(嵌入)SWI-Prolog(或任何其他实现)服务器,使其完全离线工作,或将其作为 WebAssembly 模块运行。或者对于移动应用程序,Prolog 后端可以在云中运行。

\n