明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7846|回复: 46

[讨论] 学习 lisp 递归

[复制链接]
发表于 2014-1-11 02:41 | 显示全部楼层 |阅读模式
本帖最后由 lanjqka 于 2014-1-11 11:25 编辑

还是递归 继续递归

  1. (defun str2lst (str / n)
  2.   (setq str (vl-string-trim " " str))
  3.   (setq n (vl-string-search " " str))
  4.   (if (= str "")
  5.     nil
  6.     (cons (substr str 1 n) (if n (str2lst (substr str (+ n 1))))
  7.     )
  8.   )
  9. )

点评

很好的主题,建议题目改下,如 和 递归 相关,那么主题明确,也方便查询  发表于 2014-1-11 07:21

评分

参与人数 4明经币 +5 金钱 +12 收起 理由
tryhi + 1
xiaxiang + 2 赞一个!
edata + 1 精髓~~
qjchen + 1 + 12 递归总是很有趣的主题

查看全部评分

本帖被以下淘专辑推荐:

 楼主| 发表于 2014-1-11 03:11 | 显示全部楼层
;同vl-remove
  1. (defun ouremove (x l)
  2.   (if (null l)
  3.     nil
  4.     (if (equal x (car l))
  5.       (ouremove x (cdr l))
  6.       (cons (car l) (ouremove x (cdr l)))
  7.     )
  8.   )
  9. )
回复 支持 0 反对 1

使用道具 举报

发表于 2024-4-21 18:20 | 显示全部楼层
这学习精神  值得我们学习
发表于 2022-11-29 11:26 | 显示全部楼层
这个是好东西!1
 楼主| 发表于 2014-1-11 03:14 | 显示全部楼层
本帖最后由 lanjqka 于 2014-1-13 16:57 编辑

;;同vl-position
  1. (defun ourposition (u l / i)
  2.   (if (null l)
  3.     nil
  4.     (if (eq u (car l))
  5.       0
  6.       (progn (setq i (ourposition u (cdr l))) (setq i (+ i 1)))
  7.     )
  8.   )
  9. )
;;  再改
  1. (defun ourposition (a l)
  2.   (if (null l)
  3.     nil
  4.     (if (equal a (car l))
  5.       0
  6.       (+ (ourposition a (cdr l)) 1)
  7.     )
  8.   )
  9. )
 楼主| 发表于 2014-1-11 03:21 | 显示全部楼层
http://bbs.mjtd.com/thread-108956-1-1.html
;;vl-string->list
  1. (defun string->list (str)
  2.   (if (zerop (ascii str))
  3.     nil
  4.     (cons (ascii str) (string->list (substr str 2)))
  5.   )
  6. )
;;
  1. (defun reverstr (str) ;倒置字符串
  2.   (if (zerop (ascii str))
  3.     ""
  4.     (if (<= (ascii str) 128)
  5.       (strcat (reverstr (substr str 2)) (substr str 1 1))
  6.       (strcat (reverstr (substr str 3)) (substr str 1 2))
  7.     )
  8.   )
  9. )
 楼主| 发表于 2014-1-11 03:27 | 显示全部楼层
http://bbs.mjtd.com/thread-108944-1-1.html
看了网上帖子,gcd是用了rem做辗转相除的,那可能是有效的。
  1. (defun gcd (a b)
  2.   (if (= b 0)
  3.       a
  4.       (gcd b (rem a b))))
来个 辗转相减
  1. (defun gcd2 (a b)
  2.   (if (= a b)
  3.     a
  4.     (gcd2 b (abs (- a b)))
  5.   )
  6. )
;;数表的最大公约数
  1. (defun ourgcd (l)
  2. (if (null (cadr l))
  3.    (car l)
  4.    (ourgcd (cons (gcd (car l) (cadr l)) (cddr l)))
  5. )
  6. )
 楼主| 发表于 2014-1-11 03:32 | 显示全部楼层
本帖最后由 lanjqka 于 2014-1-11 03:37 编辑

最近学习了递归 没有收住 欢迎大家一起来
递归的感觉
(...
  (if (退出条件)
    退出形式
   (符合递归形式)
  )
...
)

点评

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=83019 这里chlh_jd 也给过很有趣的题目  发表于 2014-1-11 07:24
 楼主| 发表于 2014-1-11 03:52 | 显示全部楼层
本帖最后由 lanjqka 于 2014-1-11 04:02 编辑
  1. ;; getnum
  2. (defun ourgetnum (/ val)
  3.   (setq val (read (getstring "\nPlease enter a number : ")))
  4.   (if (numberp val)
  5.     (eval val)
  6.     (ourgetnum)
  7.   )
  8. )
 楼主| 发表于 2014-1-11 11:28 | 显示全部楼层
;;转录 ;;同length
  1. (defun ourlength (l)
  2.   (if (null l)
  3.     0
  4.     (+ (ourlength (cdr l)) 1)
  5.   )
  6. )
 楼主| 发表于 2014-1-11 11:38 | 显示全部楼层
;;同member
  1. (defun ourmember (x l)
  2.   (if (null l)
  3.     nil
  4.     (if (equal x (car l))
  5.       l
  6.       (ourmember x (cdr l))
  7.     )
  8.   )
  9. )
 楼主| 发表于 2014-1-11 11:48 | 显示全部楼层
本帖最后由 lanjqka 于 2014-1-13 13:09 编辑


  1. ;; nth
  2. (defun ournth (n l)
  3.   (if (null l)
  4.     nil
  5.     (if (zerop n)
  6.       (car l)
  7.       (ournth (- n 1) (cdr l))
  8.     )
  9.   )
  10. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 20:04 , Processed in 0.380315 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表