【问题标题】:Drawing in SWI (or any) Prolog在 SWI(或任何)Prolog 中绘图
【发布时间】:2022-02-14 20:01:00
【问题描述】:

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

这是 Prolog 在概念上能够做到的吗?

我问错问题了吗?

【问题讨论】:

标签: graphics prolog drawing


【解决方案1】:

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

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

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

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

我不知道任何专门为此开箱即用的工作示例(尽管我打算从事类似的工作)但您应该能够找到 PrologBrowser 的工作示例(甚至 - >TauProlog) 设置。随着 TauProlog 在浏览器中运行,Prolog 和渲染之间某些类型的较重流量可以从 WS 连接中卸载,以防绘图逻辑需要对循环期间渲染的内容进行大量检查。

要使用开箱即用的光栅和矢量实用程序使用画布,您可以使用 Paper.js 代替原始的 Javascript 画布 API。

您还可以在浏览器中运行完整的 SWI Prolog(编译为 WebAssembly),既可以独立执行,也可以补充在后端运行的程序。见https://github.com/SWI-Prolog/swipl-wasm(我自己没有测试过)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2012-03-15
    • 2014-12-22
    相关资源
    最近更新 更多