相关疑难解决方法(0)

为什么Perl如此害怕"深度递归"?

我最近偶然发现了高阶Perl这本书,它基本上提出了以功能方式在Perl中做事的方法.作者解释说,Perl拥有Lisp的7个核心功能中的6个,而C没有.

我有一个问题,看起来像一个递归解决方案的好候选人,我以这种方式编码.但Perl抱怨"深度递归".我google了一下,发现一个Perl和尚解释说"Perl不是Haskell".当递归深度超过100个级别时,默认情况下,您会收到投诉.

办法来扩展这个限制或完全关闭它,但我的问题是:

  • 有没有理由让Perl对递归这么紧张,而Haskell根本就没有?

recursion perl haskell

32
推荐指数
3
解决办法
5373
查看次数

Perl 5中的惰性评估技术示例?

我发现Haskell和Perl6最有趣的特性之一是能够推迟计算值,直到实际需要它们为止.

另一方面,Perl5喜欢立即做所有事情,但据我所知,它包含了懒惰评估的所有必要原语.那些是:

  • 采取参考@_的子程序创建一个别名在其参数列表中的标识符数组引用,即使其中的一些标识符不包含值呢.
  • \@_内部保存的子例程返回重载/绑定对象,然后在需要时取消引用它.(并且有各种CPAN模块可以抽象出领带/过载细节)

我一直在Perl中尝试各种惰性编程技术(我在工作中有一个模块,在Perl5中实现了一些Haskell Prelude(像共同递归:$_ = list 0, 1, zipWith {&sum} $_, tail $_ for my $fibs;定义Fibonacci序列已经在工作)).但我感觉代码中隐藏着一些微妙的错误,这些错误可能在函数用于较大的表达式/程序时显现出来.

所以我想知道是否有任何好的例子(CPAN /博客/书籍),任何人都知道,在Perl5中使用Haskell/Perl6就像懒惰一样?特别是,我想阅读使用这种类型的懒惰的任何重要大小的代码.

我也有兴趣知道是否有任何人遇到任何关于在Perl 5中实现延迟评估的问题或难以处理的问题.

perl haskell lazy-evaluation

5
推荐指数
2
解决办法
1613
查看次数

如何将tr ///应用于Perl数组的每个元素?

有没有更好的方法在数组中的每个元素上使用tr ///而不是以下方法:

foreach (@list) {
    tr/abc/xyz/;
}
Run Code Online (Sandbox Code Playgroud)

我正在玩一些东西而且我无法理解它看起来不太正确/最佳.也许我只想到条件可以如何以后缀形式使用.有人知道是否有办法使用后缀形式tr ///或s ///?

perl

2
推荐指数
2
解决办法
2334
查看次数

在perl中为两个元素使用"map()"有什么意义?

我已经看到了代码,其中只有两个相当静态的元素被映射,例如具有开始和结束日期的时间间隔,但是map()正在使用而不是用于映射的显式代码,例如

{ map { ... } qw(start end) }   # vs.
{ start => ..., end => ... }
Run Code Online (Sandbox Code Playgroud)

哪种方式更受欢迎,为什么?

map形态可能不那么简洁,但看起来更多的功能(如函数式编程),所以我想这就是为什么它可能优于明确的代码也许是更加干燥.

但是,它对我来说看起来不太清晰,因为后面有更多的逻辑,并且映射也应该效率较低,因为它调用a调用并包含更多的原子操作.

编辑
在编程中存在一个相互矛盾的目标:KISS(保持它{选择2来自:小,简单,愚蠢}).使用map稍微复杂的代码.

perl map-function

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

map和grep如何工作?

我在脚本中碰到这个代码来了,能否请您解释一下map,并grep在这里呢?

open FILE, '<', $file or die "Can't open file $file: $!\n";
my @sets = map {
                  chomp;
                  $_ =~ m/use (\w+)/;
                  $1;
                }
grep /^use/, ( <FILE> );

close FILE;
Run Code Online (Sandbox Code Playgroud)

指向的文件$file有:

use set_marvel;
use set_caprion;
and so on...
Run Code Online (Sandbox Code Playgroud)

perl

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

标签 统计

perl ×5

haskell ×2

lazy-evaluation ×1

map-function ×1

recursion ×1