小编Sea*_*ean的帖子

为什么Perl 6只尝试在两种类似情况中的一种情况下评估无限列表?

假设我使用REPL上的三角形缩小定义了一个惰性无限数组,并在前面粘贴了一个元素:

> my @s = 0, |[\+] (1, 2 ... *)
[...]
Run Code Online (Sandbox Code Playgroud)

我可以打印出前几个元素:

> @s[^10]
(0 1 3 6 10 15 21 28 36 45)
Run Code Online (Sandbox Code Playgroud)

我想将减少内部的零元素移动到这样:

> my @s = [\+] (0, |(1, 2 ... *))
Run Code Online (Sandbox Code Playgroud)

然而,作为对此的回应,REPL挂起,大概是通过尝试评估无限列表.

如果我在单独的步骤中执行它,它的工作原理:

> my @s = 0, |(1, 2 ... *)
[...]
> ([\+] @s)[^10]
(0 1 3 6 10 15 21 28 36 45)
Run Code Online (Sandbox Code Playgroud)

为什么不这样做不起作用......工作?

perl6

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

从Perl 6中的异常处理程序返回值

我一直在尝试编写一个执行以下逻辑的Perl 6表达式:计算子表达式并返回其值,但如果这样做会导致引发异常,请捕获异常并返回固定值.

例如,假设我想要分割两个数字,并且-1如果发生错误,则将表达式求值为.在Ruby中我可能会写:

quotient = begin; a / b; rescue; -1; end
Run Code Online (Sandbox Code Playgroud)

在Emacs Lisp中可能写成:

(setq quotient (condition-case nil (/ a b) (error -1))
Run Code Online (Sandbox Code Playgroud)

我的第一次Perl 6尝试是这样的:

sub might-throw($a, $b) { die "Zero" if $b == 0; $a / $b }
my $quotient = do { might-throw($a, $b); CATCH { default { -1 } } };
Run Code Online (Sandbox Code Playgroud)

$quotient无论是否$b为零,这里最终都是未定义的.

似乎CATCH忽略了返回的值,或者至少在描述异常如何工作的doc页面上,所有CATCH主体仅执行具有副作用的事情,例如日志记录.

该页面提到try了另一种选择.我可以写一些例子:

my $quotient = try { might-throw($a, $b) } // …
Run Code Online (Sandbox Code Playgroud)

resume exception try-catch perl6 raku

9
推荐指数
3
解决办法
237
查看次数

Raku 的 is-prime 函数有多可靠?

Raku 函数的文档说明is-prime如下:

如果已知此 Int 是素数,或者根据概率 Miller-Rabin 测试很可能是素数,则返回 True。

如果已知此 Int 不是素数,则返回 False。

我在 Raku 中进行了大量的代码编程,对于许多问题来说,有一个内置的方法来测试素性是非常方便的。例如,要获取素数的惰性无限序列:

my @primes = grep &is-prime, ^Inf;
Run Code Online (Sandbox Code Playgroud)

然而,有时我会因为文档中所说的“如果此 Int 为素数则返回 True,否则返回 False”以外的内容而感到困扰。事实上,该措辞似乎承认可能​​存在误报或漏报。

真的有多可靠is-prime

primes raku

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

在Emacs中更改文本外观:叠加工作,文本属性不

我今天一直在用Emacs中的文本属性进行实验.如果我将光标定位在包含一些文本的行上,然后执行以下代码M-:,则该行将以粗体重新显示.

(overlay-put
 (make-overlay
  (line-beginning-position)
  (line-end-position))
 'face 'bold)
Run Code Online (Sandbox Code Playgroud)

但是,如果我用覆盖(remove-overlays)并删除覆盖并执行以下代码,则没有任何反应(除了迷你缓冲区中出现"nil"一词).

(put-text-property
 (line-beginning-position)
 (line-end-position)
 'face 'bold)
Run Code Online (Sandbox Code Playgroud)

从我到目前为止收集到的内容来看,我希望这两个片段应该产生相同的视觉效果.他们为什么不呢?

emacs overlays

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

Perl6-ish表达式为整数位

我一直试图通过观察一些高尔夫问题来锻炼我的Perl 6排骨.其中一个涉及提取整数的位.我无法想出一种简洁的方式来编写这样的表达式.

到目前为止,我的"最佳"尝试跟随,使用2000数字.我不在乎最重要或最不重要的位是第一位的.

数字表达式:

map { $_ % 2 }, (2000, * div 2 ... * == 0)
Run Code Online (Sandbox Code Playgroud)

递归匿名子例程:

{ $_ ?? ($_ % 2, |&?BLOCK($_ div 2)) !! () }(2000)
Run Code Online (Sandbox Code Playgroud)

转换为字符串:

2000.fmt('%b') ~~ m:g/./
Run Code Online (Sandbox Code Playgroud)

其中,第一个对我来说感觉最干净,但能够在一个步骤中生成位而不是映射到中间列表上真的很好.

使用单个表达式,是否有更简洁,更短和/或更惯用的方法来获取位?(也就是说,无需编写命名函数.)

perl6

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

在 Raku 集中查找列表键

在 Raku 中,我可以创建一组列表:

> my $set = SetHash.new((1, 2), (3, 4, 5))
SetHash((1 2) (3 4 5))
> $set.keys.map(&WHAT)
((List) (List))
Run Code Online (Sandbox Code Playgroud)

但我似乎无法检查列表键是否存在:

> $set{(1,2)}
(False False)
Run Code Online (Sandbox Code Playgroud)

...因为下标中的列表被解释为切片,而不是单个键。

有什么办法可以查找这样的密钥吗?

raku

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

禁用特定命令的ido模式?

我已经使用偶像模式几个月了,偶尔到处都是偶像,我一般都很满意.但是,我希望我能改变一件事.当我键入C-u M-x shell以创建具有特定名称的新shell缓冲区时,ido为我提供了所有打开缓冲区的完成列表.如果我选择一个,则在该缓冲区中启动一个新的shell,无论它包含什么,它都会被置于shell模式.很难想象一个有用的用例.

有没有办法只为shell命令停用ido-mode?(当然,除了我将来偶然发现的任何其他类似命令.)

emacs ido

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

无法使用Esqueleto编写双左连接

我有一个教师,学校和地区的数据库模式.该TEACHERS表具有可以为空的SCHOOL_ID列(教师可能属于或可能不属于学校),并且该SCHOOLS表具有可为空的DISTRICT_ID列(学校可能属于或可能不属于某个区).

使用Esqueleto,我想要一个教师名单,每个教师都有一所学校(如果他们属于一所学校)和一个学区(如果他们属于属于某个学区的学校).花了一点时间才找出适合老师的正确表达 - >学校左连接,但我最终做对了:

select $
from $ \(teacher `LeftOuterJoin` school) -> do
  on (teacher ^. TeacherSchoolId  ==. school ?. SchoolId)
  return (teacher, school)
Run Code Online (Sandbox Code Playgroud)

我尝试DISTRICTS使用类似的表达式添加另一个左连接:

select $
from $ \(teacher `LeftOuterJoin` school `LeftOuterJoin` district) -> do
  on (school  ^. SchoolDistrictId ==. district ?. DistrictId)
  on (teacher ^. TeacherSchoolId  ==. school   ?. SchoolId)
  return (teacher, school, district)
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

Couldn't match type ‘Entity School’ with ‘Maybe (Entity School)’
Expected type: SqlExpr (Maybe …
Run Code Online (Sandbox Code Playgroud)

haskell esqueleto

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

无法让苹果酒工作

上个月有人帮助我让Cider参与Clojure项目.我喜欢的功能,特别是M-.,cider-jump-to-var.但从那时起,我无法在原始项目或新项目中复制正确的行为,并且最初帮助我的人不再可用.

在我仍然检查过的原始项目中,有一条线

[cider/cider-nrepl "0.7.0"]
Run Code Online (Sandbox Code Playgroud)

:dependencies我的部分project.clj.当我添加这样一条线,我的新项目,然后运行lein replcider-connect,我得到这个消息:

; CIDER 0.8.0alpha (package: 20141006.507) (Java nil, Clojure 1.6.0, nREPL 0.2.3)
WARNING: The following required nREPL ops are not supported: 
classpath complete info inspect-start inspect-refresh inspect-pop inspect-push inspect-reset macroexpand ns-list ns-vars resource stacktrace toggle-trace undef
Please, install (or update) cider-nrepl 0.8.0-snapshot and restart CIDER
WARNING: CIDER's version (0.8.0-snapshot) does not match cider-nrepl's version (0.7.0)
Run Code Online (Sandbox Code Playgroud)

果然,当我跳到符号的定义(比如说first)时,我得到:

cider-ensure-op-supported: Can't find nREPL middleware …
Run Code Online (Sandbox Code Playgroud)

emacs clojure cider

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

有什么方法可以在 Ruby 中创建一个新的空绑定吗?

有没有办法创建一个完全空的Binding对象以供使用eval

根据文档,只有该Kernel#binding方法可以创建新的绑定。我尝试过这样的事情:

empty = binding
Run Code Online (Sandbox Code Playgroud)

但是,该绑定将empty其自身包含在其局部变量中,以及稍后在代码中分配的相同范围内的任何其他局部变量。

我发现这个常量TOPLEVEL_BINDING是一个空的绑定,它足以满足我的直接目的。但可能并不总是如此。

有什么办法可以创建一个全新的、完全空的吗Binding

ruby

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

标签 统计

emacs ×3

perl6 ×3

raku ×3

cider ×1

clojure ×1

esqueleto ×1

exception ×1

haskell ×1

ido ×1

overlays ×1

primes ×1

resume ×1

ruby ×1

try-catch ×1