【发布时间】:2020-09-14 10:24:00
【问题描述】:
我在学乐,跟着书Thinking in Raku
我需要定义一个 ackermann 函数的练习。
我定义了一个正整数子集:
subset Positive-Integer of Int where { $_ > 0}
然后我通过递归版本使用:
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;
}
但是执行我执行时得到的代码:
阿克曼 3, 4;
> * * &ackermann
> > * * &ackermann
> > * * &ackermann
> > ackermann 3, 4
Cannot resolve caller ackermann(Int:D, Int:D); none of these signatures match:
(0, Int $n)
(Int $m, 0)
in sub ackermann at <unknown file> line 3
in sub ackermann at <unknown file> line 3
in sub ackermann at <unknown file> line 3
in sub ackermann at <unknown file> line 3
in sub ackermann at <unknown file> line 3
in sub ackermann at <unknown file> line 3
in sub ackermann at <unknown file> line 3
in block <unit> at <unknown file> line 2
>
我不明白这里发生了什么。
【问题讨论】:
标签: raku