假设我使用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)
为什么不这样做不起作用......工作?
我一直在尝试编写一个执行以下逻辑的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) 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?
我今天一直在用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)
从我到目前为止收集到的内容来看,我希望这两个片段应该产生相同的视觉效果.他们为什么不呢?
我一直试图通过观察一些高尔夫问题来锻炼我的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)
其中,第一个对我来说感觉最干净,但能够在一个步骤中生成位而不是映射到中间列表上真的很好.
使用单个表达式,是否有更简洁,更短和/或更惯用的方法来获取位?(也就是说,无需编写命名函数.)
在 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)
...因为下标中的列表被解释为切片,而不是单个键。
有什么办法可以查找这样的密钥吗?
我已经使用偶像模式几个月了,偶尔到处都是偶像,我一般都很满意.但是,我希望我能改变一件事.当我键入C-u M-x shell以创建具有特定名称的新shell缓冲区时,ido为我提供了所有打开缓冲区的完成列表.如果我选择一个,则在该缓冲区中启动一个新的shell,无论它包含什么,它都会被置于shell模式.很难想象一个有用的用例.
有没有办法只为shell命令停用ido-mode?(当然,除了我将来偶然发现的任何其他类似命令.)
我有一个教师,学校和地区的数据库模式.该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) 上个月有人帮助我让Cider参与Clojure项目.我喜欢的功能,特别是M-.,cider-jump-to-var.但从那时起,我无法在原始项目或新项目中复制正确的行为,并且最初帮助我的人不再可用.
在我仍然检查过的原始项目中,有一条线
[cider/cider-nrepl "0.7.0"]
Run Code Online (Sandbox Code Playgroud)
在:dependencies我的部分project.clj.当我添加这样一条线,我的新项目,然后运行lein repl和cider-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) 有没有办法创建一个完全空的Binding对象以供使用eval?
根据文档,只有该Kernel#binding方法可以创建新的绑定。我尝试过这样的事情:
empty = binding
Run Code Online (Sandbox Code Playgroud)
但是,该绑定将empty其自身包含在其局部变量中,以及稍后在代码中分配的相同范围内的任何其他局部变量。
我发现这个常量TOPLEVEL_BINDING是一个空的绑定,它足以满足我的直接目的。但可能并不总是如此。
有什么办法可以创建一个全新的、完全空的吗Binding?