我是Haskell的新手,此刻真正困扰我的是为什么制作库的人添加了调用的函数fst,snd而不是像(first和)那样使用(普通)名称second.后者的名字有什么问题?
我个人觉得这些缩写可笑:"为什么snd,为什么不呢?sec,scnd或scd或为什么不?fir,frst,ft或frt?" 它只是缺乏风格.(但再次 - 这是个人观点)
很明显我不是C的主管作者,但是想知道,与Ackermann这个问题有关,Haskell/GHC非常低效(这可能让我非常不理智)为什么作者计算Wilhelm Ackermann的着名功能:
int ack(int m, int n) {
if (m == 0) return n+1;
if (n == 0) return ack(m-1, 1);
return ack(m-1, ack(m, n-1));
}
int main() {
printf("%d\n", ack(4,1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
工作得很好,但是当给出一个明显的优化(这有助于其他地方)并给出参数(4,2) - 当然在算法上是残忍的 - 结束于Segmentation fault: 11:
int ack(int m, int n) {
if (m == 0) return n+1;
if (m == 1) return n+2;
if (n == 0) return ack(m-1, 1);
return ack(m-1, ack(m, n-1));
}
int …Run Code Online (Sandbox Code Playgroud)