美文网首页
Lisp十戒五律

Lisp十戒五律

作者: Saru様 | 来源:发表于2016-11-27 15:01 被阅读0次

    十戒


    • 第一戒
    • 当递归原子列表lat时,要思考:(null? lat)和其他

    • 当递归数字 n时,要思考:(zero? n)else

    • 当递归s表达式 l 时列表时,要思考:
      (null? l)else
      (atom? (car l))else

    • 第二戒
    • 使用cons创建列表

    • 第三戒
    • 当创建列表时,先写下第一个元素,然后通过递归方式使用cons来进行创建

    • 第四戒
    • 当递归时,总是至少要改变一个参数

    • 当递归原子列表flat时,使用(cdr lat)

    • 当递归数字n时,使用(sub1 n)

    • 当递归s表达式l时,当l即不是(null ?)也不是(atom? (car l))时,使用(car l)(cdr l)

    • 参数必须不断变化以达成结束条件。变化后的参数必须进行结束条件测试:

      • 当使用cdr时,使用null?测试是否结束
      • 当使用sub1时,使用zero?测试是否结束
    • 第五戒
    • 当使用+创建值时,使用0来作为结束,0不会改变加数的值

    • 当使用*来创建值时,使用1来作为结束,乘1不会改变乘数的值

    • 当使用cons来创建值时,应该考虑使用()做为终结

    • 第六戒
    • 函数正确是精简代码的前提

    • 第七戒
    • 当子组件与父组件相同,则可以用递归便利,如

    • 列表中的子列表

    • 算数表达式的子表达式

    • 第八戒
    • 使用辅助函数来抽象表现

    • 第九戒
    • 将共用部分抽象为一个新函数

    • 第十戒
    • 创建函数时尽量一次性接受可能多的值

    五律


    • Car法则
      • 原始(snsr)car只能用于非空列表
    • Cdr法则
    • 原始(snsr)cdr只能用于非空列表

    • cdr产生一个新列表

    • Cons法则
      • 原始(snsr)cons接受两个参数
      • cons的第二个参数必须为一个列表
      • 结果是一个列表
    • Null?法则
      • 原始(snsr)null?只对列表进行判断,只有当空列表时才返回#t,否则返回#f
    • Eq?法则
      • 原始(snsr)eq?接受两个参数
      • 每个参数必须是非数字的原子

    相关文章

      网友评论

          本文标题:Lisp十戒五律

          本文链接:https://www.haomeiwen.com/subject/wjxnpttx.html