小编Wal*_*ard的帖子

Linux g++ 在 C++ 中嵌入 Prolog 逻辑引擎

我在 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(我的意见)

谁能给我指出一个与我正在寻找的内容接近的例子?

c++ embed prolog swi-prolog

5
推荐指数
1
解决办法
2221
查看次数

为什么组合 Perl 哈希值和每个表达式不起作用?

我最近遇到了这个并且感到非常不满:

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)

编译并运行得很好。

这是什么原因,我的不满是否有道理?

iteration perl hash concatenation

5
推荐指数
1
解决办法
144
查看次数

任何解决 __DATA__ 不是文件句柄这一事实的方法,即使它在所有文档中都是这样引用的

我读过的所有文档都说__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 filehandle

3
推荐指数
1
解决办法
103
查看次数

Perl 似乎需要一个外部模块来使用内置的 sysopen

$ 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可能是在不同的操作系统不同,但这样可能STDINSTDERRSTDOUT,但那些与使用use strict subs

perl strict

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

标签 统计

perl ×3

c++ ×1

concatenation ×1

embed ×1

filehandle ×1

hash ×1

iteration ×1

prolog ×1

strict ×1

swi-prolog ×1