小编anq*_*egi的帖子

像函数一样传递运算符

在学习 Raku 的同时,我到达了高阶函数和排序函数的点。

我有这个例子:

> sort <4 6 2 9 1 5 11>
(1 2 4 5 6 9 11)
Run Code Online (Sandbox Code Playgroud)

然后例程的文档是这样说的:

Sorts the list, smallest element first. By default infix:<cmp>  is used for
comparing list elements.
Run Code Online (Sandbox Code Playgroud)

我正在关注的那本书“Piensa en raku”在第 9.2 节中对数字排序和字典排序进行了比较。

我尝试了以下方法:

> sort &le, <4 6 2 9 1 5 11>;
===SORRY!=== Error while compiling:
Undeclared routine:
    le used at line 1. Did you mean 'lc'?
Run Code Online (Sandbox Code Playgroud)

但是遇到这个问题,而不是按字典顺序排列的排序列表。所以可能对我来说理解这一点还为时过早,但应该可以像函数一样在 Raku 中传递一个运算符,因为文档还说它正在使用中缀:或者我需要做这样的事情,也许我' m 混淆运算符和子程序:

sub my-le($a,$b) {
    $a le $b; …
Run Code Online (Sandbox Code Playgroud)

raku

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

Raku 中的多子程序递归

我正在学习乐乐,按照乐乐思考这本书

有一个练习,我需要定义阿克曼函数。

我定义了一个正整数子集:

subset Positive-Integer of Int where { $_ > 0}
Run Code Online (Sandbox Code Playgroud)

然后我使用以下方法遍历递归版本:

multi ackermann(0, Positive-Integer $n) {
    $n + 1;
}

multi ackermann(Positive-Integer $m, 0) {
    ackermann $m - 1, 1;
}

multi ackermann(Positive-Integer $m, Positive-Integer $n) {
    ackermann $m - 1, ackermann $m, $n - 1;
}
Run Code Online (Sandbox Code Playgroud)

但是执行我在执行时得到的代码:

阿克曼 3, 4;

> * * &ackermann
> > * * &ackermann
> > * * &ackermann
> > ackermann 3, 4
Cannot resolve caller ackermann(Int:D, …
Run Code Online (Sandbox Code Playgroud)

raku

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

无法将 if 语句分配给变量

这里的问题是我不太明白控制流中语句和块之间的区别。

查看三元运算符,我可以使用它来分配变量。但这是一个运算符,所以它就像应用一个函数——不是吗?

> my $variable = True ?? 34 !! 42;
34 
Run Code Online (Sandbox Code Playgroud)

因为在 raku 文档中说:

if 文件

if

要有条件地运行代码块,请使用if后跟条件。条件,一个表达式,将在语句if结束前立即计算。附加到条件的块只会在条件意味着True强制为 Bool 时进行评估。与某些语言不同,条件不必用括号括起来,而是块{}周围是强制性的:

do 文件

do

运行不能是独立语句的块的最简单方法是do在它之前写入:

所以这应该适用于两种情况:

> my $variable = do {34};
34

> my $variable = if True {34;} else {43;} 
===SORRY!===
Word 'if' interpreted as a listop; please use 'do if' to introduce the statement control word
------> my $variable = if? True {34;} else {43;} …
Run Code Online (Sandbox Code Playgroud)

raku

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

长整数到字符串,反之亦然,用数字操作

解决Euler项目问题​​我得到的是我需要使用长数字的数字作为字符串进行操作.我使用sbcl在linux,emacs,slime中工作.

例如,为了得到这个数字2的数字之和,我这样工作,

1)获得力量

CL-USER> (defparameter *answer-as-integer* (expt 2 1000))
*ANSWER-AS-INTEGER*
CL-USER> *ANSWER-AS-INTEGER*
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Run Code Online (Sandbox Code Playgroud)

感谢Common Lisp,这非常简单.现在我相信一个好方法应该是将reduce应用于这个数字序列.

2)获取字符串

CL-USER> (defparameter *answer-as-string* (write-to-string *ANSWER-AS-INTEGER*))
*ANSWER-AS-STRING*
CL-USER> *ANSWER-AS-STRING*
"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376" 
Run Code Online (Sandbox Code Playgroud)

现在我有了序列,所以应用reduce,但是我得到错误的东西:这是一个char所以我将转换字符应用于整数:

CL-USER> (reduce #'(lambda (x y) (+  (digit-char-p x)  (digit-char-p y))) *ANSWER-AS-string*)
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

The value 1 is not of type CHARACTER.
   [Condition of type TYPE-ERROR]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [ABORT] Abort thread (#<THREAD "repl-thread" RUNNING {1005DE80B3}>)

Backtrace:
  0: (DIGIT-CHAR-P 1) [optional]
  1: ((LAMBDA …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp

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

在github中的pull请求之前,将所有提交压缩为一个

我需要将所有提交放在一个名为初始快照的提交中,以便在github Repo中释放它,我知道为了这样做我遵循这个

我的第一个问题是我想与外部存储库共享它,这说:

需要注意的是:只在尚未推送到外部存储库的提交中执行此操作.如果其他人的工作基于您要删除的提交,则可能会发生许多冲突.如果已经与他人共享,请不要重写您的历史记录.

我想把所有提交放在一个单一的提交中会发生什么,如何做到这一点:

我发现了这个:

# Switch to the master branch and make sure you are up to date.
git checkout master
git fetch # this may be necessary (depending on your git config) to receive updates on origin/master
git pull

# Merge the feature branch into the master branch.
git merge feature_branch

# Reset the master branch to origin's state.
git reset origin/master

# Git now considers all changes as unstaged changes.
# We can add these …
Run Code Online (Sandbox Code Playgroud)

git github

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

使用 rakubrew 在其他 rakudo 版本中安装模块

使用 rakubrew 升级 rakudo 版本时,更改版本非常容易,但我想知道是否可以将 raku 模块从旧版本导入到新版本。doign zef 自动安装:

更新:

rakubrew build 2020.10
Run Code Online (Sandbox Code Playgroud)

但是之后:

? raku
Welcome to ™ v2020.10.
Implementing the ™ programming language v6.d.
Built on MoarVM version 2020.10.

You may want to `zef install Readline` or `zef install Linenoise` or use rlwrap for a line editor

To exit type 'exit' or '^D'
Run Code Online (Sandbox Code Playgroud)

所以我需要安装我目前使用的所有模块:

rakubrew build-zef zef 安装 Sparrow6 zef 安装 Linenoise

因此存在任何文件 .zef 或 .rakubrew 或检查以自动维护此模块的东西

rakudo raku rakubrew

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

如何反省Raku运营者?

我可以反省 Raku 中的例程,例如say 例程:

[5] >  &say.WHAT                                                                                                                                                                   
(Sub)
[6] >  &say.^mro                                                                                                                                                                   
((Sub) (Routine) (Block) (Code) (Any) (Mu))
Run Code Online (Sandbox Code Playgroud)

但我如何自省诸如+doc page)之类的操作符?

[7] >  &+.WHAT                                                                                                                                                                     
Use of uninitialized value of type Callable in numeric context
  in block <unit> at <unknown file> line 1
  in any <main> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1
  in any <entry> at /home/toni/.rakubrew/versions/moar-blead/install/share/perl6/runtime/perl6.moarvm line 1

Use of uninitialized value of type Any in numeric context
  in block <unit> at <unknown file> line 1
  in any <main> …
Run Code Online (Sandbox Code Playgroud)

function operators raku

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

为什么没有用Common Lisp编写的Common Lisp实现?

最近,我开始学习cuis-smalltalk,并且我没有意识到使用Smalltalk的深度和深度OOP与CLOS(我使用Ruby)相比.我了解到Smalltalk本身就是一个反射系统的好主意.我发现Ruby有Rubinius,但是当我找到用Lisp编写的Common Lisp实现时,我找不到类似的东西.似乎没有用CL编写的CL分发.

在使用CLOS和slime的Common Lisp中,您可以完成与Smalltalk Development环境相关的所有操作.

但我有一个问题,如果Common Lisp实现本身对Common Lisp有用吗?或者不会添加任何特殊的语言,因为homoiconicity,宏和MOP可以处理所有.是否存在无法完成的技术限制?

smalltalk common-lisp

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

在 raku 中取消绑定或取消定义变量

阅读 Raku 文档后,我只发现这是为了取消定义变量。我相信在 Raku 中,赋值和绑定之间存在差异。

定义和取消定义标量很容易。

> my $n
(Any)
> $n.defined
False
> $n = 3
3
> $n.defined
True
> $n = Nil
(Any)
> $n.defined
False
Run Code Online (Sandbox Code Playgroud)

当变量被绑定时,这是不可能的。

> my $k := 5
5
> $k := Nil
===SORRY!=== Error while compiling:
Cannot use bind operator with this left-hand side
at line 2
------> <BOL>?<EOL>
> $k = Nil
Cannot assign to an immutable value
  in block <unit> at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)

对于数组或散列,我可以清空它,但变量仍然被定义。

对于函数,当你用 定义一个函数时 …

rakudo raku

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

在使用递归连接函数格式之后,在Common Lisp中打印字符串

我正在尝试从Paul Graham学习Common Lisp阅读Ansi Common Lisp并使用EEC325 课程评论和运行测试功能和讲座.我用粘液和SBCL设置了Emacs

问题在于第3章练习8说:

定义一个获取列表并以点表示法打印的函数:

> (showdots ' ( a b c))
(A . (B . (C . NIL)))
NIL
Run Code Online (Sandbox Code Playgroud)

我做了以下函数,结果是一个字符串,它适用于案例,但不打印这是练习的主要目标

(defun show-dots (lst)
  (cond
    ((atom lst) (format nil  "~A" lst ))
    ((consp lst) (format nil "(~A . ~A)"
             (show-dots (car lst))
             (show-dots (cdr lst))))))
Run Code Online (Sandbox Code Playgroud)

问题是它产生的字符串不会打印字符串,但它可以工作

CS325-USER> (SHOW-DOTS '(A B C))
"(A . (B . (C . NIL)))"
CS325-USER>  (SHOW-DOTS '(A (B C)))
"(A . ((B . (C . NIL)) . NIL))"
CS325-USER>  (SHOW-DOTS '(A . …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp

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

标签 统计

raku ×6

common-lisp ×3

rakudo ×2

sbcl ×2

function ×1

git ×1

github ×1

operators ×1

rakubrew ×1

smalltalk ×1