我在 C++ 程序中的一些逻辑不仅非常复杂,而且需要多种解决方案,而 Prolog 是理想的选择。它有点像防火墙配置脚本,检查操作的输入,但有时需要不止一项操作。
我想要的是这样的:
class PrologEngine
{
LoadLogic(const char* filename) throw PrologException; // Load a file of prolog rules, predicates facts etc in textual format. Must be callable multiple times to load AND COMPILE (for speed) prolog rule files.
std::vector<std::string> Evaluate(const char* predicate_in_string_form = "execute(input, Result)") throw PrologException; Returns a vector of matching predicates in text form.
};
Run Code Online (Sandbox Code Playgroud)
它不需要回调 C++ 的能力。
AMI Prolog 似乎可以使用它,但它在 Linux 上不可用。我正在尝试使用 SWI-Prolog,但只能找到 2 个示例和令人难以置信的拜占庭 API(我的意见)
谁能给我指出一个与我正在寻找的内容接近的例子?
我最近遇到了这个并且感到非常不满:
while (my ($key, $value) = each (%hash1, %hash2)) {
}
Run Code Online (Sandbox Code Playgroud)
出现此错误:现在禁止在标量上进行实验每个......
但这似乎是使用多余变量的相同操作:
my %h = (%hash1, %hash2);
while (my ($key, $value) = each %h) {
}
Run Code Online (Sandbox Code Playgroud)
编译并运行得很好。
这是什么原因,我的不满是否有道理?
我读过的所有文档都说__DATA__“特殊文件句柄”之类的内容,但它不是文件句柄,不是吗?
https://perldoc.perl.org/perldata#Special-Literals
默认情况下,当 Perl 读取文件来解析源代码时,DATA 文件句柄具有适当的 PerlIO 层。”
#!/bin/env perl
open($config, "<test.pl");
$config_copy = $config; # let's me copy a filehandle
while (<$config_copy>) {
print $_; # works just fine
}
$config_copy = __DATA__; # FAIL syntax error does not let me copy a filehandle
while (<$config_copy>) {
print $_;
}
__DATA__
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我基本上想将文件句柄传递给配置文件读取器函数或传递__DATA__(如果存在),但读取器函数位于与段不同的包中__DATA__,因此我需要__DATA__作为参数传递,因为__DATA__只能从同一个包或文件它在其中声明,但 Perl 并不__DATA__像其他文件句柄那样对待。它不能作为函数参数进行赋值或传递。
------ package ConfigReader ------------------
package ConfigReader;
sub ReadConfig …Run Code Online (Sandbox Code Playgroud) $ perl -e 'use strict subs; print sysopen(my $temp, "./myfile.txt", O_RDONLY);'
Bareword "O_RDONLY" not allowed while "strict subs" in use at -e line 1
Run Code Online (Sandbox Code Playgroud)
如果你在命令行上运行它,你会得到那个错误。我明白为什么这是一个错误,解决方案是use Fnctl但这是必须安装在盒子上的东西。人们对 Perl 有足够多的抱怨,我正试图给他们一个工具,(秘密地)展示 Perl 的有用性以及它(可能)有多么小麻烦。这没有帮助。
我正在尝试编写一个 Perl 实用程序,人们可以将其用作单个文件,而无需安装外部库。为什么内置需要外部模块?据我所知,O_RDONLY可能是在不同的操作系统不同,但这样可能STDIN,STDERR和STDOUT,但那些与使用use strict subs。