小编10a*_*nts的帖子

为什么Emacs lisp中没有尾递归优化,不像其他方案一样?

Emacs lisp是LISP的一种方言,特别是Scheme.大多数计划解释器确实有Tail Recursion的优化,但是emacs lisp不行.我在`info elisp'搜索了一段时间的原因,但我找不到它.

PS是的,在elisp中还有其他的迭代语法,比如'while',但我仍然找不到他们没有像其他方案解释器那样实现尾递归的好理由.

lisp emacs recursion scheme elisp

6
推荐指数
4
解决办法
1297
查看次数

当使用strtok时,标准C函数atof返回分段错误

我有使用atof和strtok的问题.

#include<stdio.h> // printf
#include<stdlib.h> // atof
#include<string.h> // strtok

int main()
{
  char buf[256]="123.0 223.2 2314.2";
  char* tp;

  printf("buf : %s\n", buf);
  tp = strtok(buf," ");
  printf("tp : %g ", atof(tp));
  while (tp!=NULL) {
    tp = strtok(NULL," ");
    printf("%g ", atof(tp));
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以编译上面的代码,它不会返回任何错误或警告消息.但是当我执行"a.out"时,它会返回如下所示的分段错误.

78746 Segmentation fault: 11  ./a.out
Run Code Online (Sandbox Code Playgroud)

我不知道是什么问题.正如我所见,上面的代码不会复合语法错误.

c strtok atof

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

标签 统计

atof ×1

c ×1

elisp ×1

emacs ×1

lisp ×1

recursion ×1

scheme ×1

strtok ×1