admin';?>

首页 / 生活琐记

原来这就是Lisp宏,苍天呐

By admin  •  2019-10-01 23:01:49  •  291次点击
永久外链: https://i.otherhill.com/static/lbc9n1zxetokgnro3ira6yuc24p7lshy.html
在C语言中,比如说写个字符串查找函数 :
int search(const char* s,const int s_len,  const char c)
{
    for(int i=0;i<s_len;i++) 
    {
      if(s[i] == c) return i;
    } 
    return -1; 
}
好,我现在还需要一个反查找,那么这么改:
int search(const char* s,const int s_len,  const char c, bool from_end)
{
    if(from_end)
    {
       for(int i=s_len-1;i>=0;i--)
       {
         if(s[i] == c) return i;
       }
   }else
   {
      for(int i=0;i<s_len;i++) 
      { 
         if(s[i]== c) return i; 
      } 
   }
   return -1; 
}
完美 好,现在看Lisp放大招:


运行结果:
lisp宏的强大之处在于,利用代码来控制编译器,编译你运行时所需的代码。lisp宏代码可以被部分地执行,这些被预先执行的宏,生成了新的代码,新的代码与旧的代码一起,参与到最终的运行.C语言中的宏仅仅是编译前简单的替换.

Lisp另一个牛逼之处在于: 运行时局部更新.
静态语言,你改一个字节,那么你要编译并重新生成程序.如果改的是大工程中的头文件.那就哭吧.
动态语言,你要改个字节,重新加载下就行了,但是这个程序如果需要一直运行呢?那么,对不起,必须重新运行才能看到效果.但是lisp不用!.
比如说,我在服务器上开个lisp服务程序,给大家用,几万万人在线呢,你停掉,然后再reload一遍?Lisp不需要,你改哪个文件,reload那个文件就行了,程序不用停,专业名字好像叫"热更".php,python应该都有此功能.
但是性能上,lisp更胜一筹,据说很多航天器上的程序就是用lisp写的.有的程序有bug,但是不能被重启的,或者重启的风险很大.
当航天器在外太空出了故障要修复时,lisp的优势就显示出来了.

0 回复 | 直到2022-09-30 23:15添加回复

回复

最近更新

私信给我
生成图片 生成二维码 生成密码
清空