找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6600|回复: 73

[研讨] 关于LISP表处理的测试练习,看看谁的代码高效的前提下更简洁

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-26 13:29:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 Lispboy 于 2013-5-26 14:14 编辑


条件:点表  Pts = '(p1 p2 p3 p4 p5...pn) 得:  '((p1 p2)(p2 p3)(p3 p4)....(pn-1 pn))

大家试试写下代码。

评分

参与人数 3D豆 +20 收起 理由
XDSoft + 10 好主题奖!
炫翔 + 5 出题引导交流奖!
wowan1314 + 5 出题引导交流奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-26 13:43:20 | 显示全部楼层
我来支持下你。
  1. ;;(SETQ LST '(1 2 3 4 5 6 7 8))
  2. ;;(T11 LST)=>((1 2) (3 4) (5 6) (7 8))
  3. (DEFUN T11 (LST / LST1)
  4.   (SETQ LST1 NIL)
  5.   (WHILE (SETQ LST1 (CONS (LIST (CAR LST) (CADR LST)) LST1)
  6.                LST (CDDR LST)
  7.          )
  8.   )
  9.   (reverse LST1)
  10. )


点评

回答错误了,不是拆分表,是重新组合表  发表于 2013-5-26 13:58

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 及时回复奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 13:55:35 | 显示全部楼层
wowan1314 发表于 2013-5-26 13:43
我来支持下你。
;;(SETQ LST '(1 2 3 4 5 6 7 8))
;;(T11 LST)=>((1 2) (3 4) (5 6) (7 8))

葛老,咋我的帖子里面总有你呢。:hug:

点评

彼此彼此撒。  发表于 2013-5-26 13:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-5-26 14:01:35 | 显示全部楼层
修正楼上的:
  1. ;;(SETQ LST '(1 2 3 4 5 6 7 8))
  2. ;;(T11 LST)=>((1 2) (2 3) (3 4) (4 5) (5 6) (6 7) (7 8))
  3. (defun t11 (lst / lst1)
  4.   (setq lst1 nil)
  5.   (while (and
  6.            (car lst)
  7.            (cadr lst)
  8.          )
  9.     (setq lst1 (cons (list (car lst) (cadr lst)) lst1)
  10.           lst (cdr lst)
  11.     )
  12.   )
  13.   (reverse lst1)
  14. )

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 14:02:34 | 显示全部楼层

葛老,程序不对哦

  1. 命令: (setq a '(1 2))
  2. (1 2)

  3. 命令: (t11 a)
  4. ((1 2))

  5. 命令: (setq b '(1 2 3))
  6. (1 2 3)

  7. 命令: (t11 a)
  8. ((1 2))

点评

看错题了! 晕。 cddr改成CDR就可以了撒  发表于 2013-5-26 14:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-26 14:05:27 来自手机 | 显示全部楼层
(mapcar '(lambda (a b) (list a b)) lst (cdr lst))来自: Android客户端

评分

参与人数 3D豆 +15 收起 理由
Lispboy + 5 很给力!经验;技术要点;
wowan1314 + 5 一下就被终结了。
炫翔 + 5 够精辟

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-5-26 14:08:17 | 显示全部楼层

  1. (setq a '(1 3 2 4 5 5 6 7))
  2. (setq i 0 l nil)
  3. (repeat (- (length a) 1)
  4.    (setq b (nth i a)
  5.          i (1+ i)
  6.          c (nth i a)
  7.          l (cons (list b c)l)
  8.    )
  9. )
  10. (reverse l)

评分

参与人数 2D豆 +8 收起 理由
Lispboy + 5 及时回复奖!
炫翔 + 3 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 14:18:04 | 显示全部楼层
Free-Lancer 发表于 2013-5-26 14:05
(mapcar '(lambda (a b) (list a b)) lst (cdr lst))

除了循环语句外,如果用LISP的基本函数呢,就是CONS,CAR,CDR这样的组合,还有什么更效率的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-26 14:34:46 | 显示全部楼层
本帖最后由 wowan1314 于 2013-5-26 17:31 编辑
Lispboy 发表于 2013-5-26 14:18
除了循环语句外,如果用LISP的基本函数呢,就是CONS,CAR,CDR这样的组合,还有什么更效率的?

又尝试写了个!
  1. ;;(SETQ LST '(1 2 3 4 5 6 7 8))
  2. ;;测试
  3. ;;(T12 LST)=>((1 2) (2 3) (3 4) (4 5) (5 6) (6 7) (7 8))
  4. (DEFUN T12 (LST / LST1 T11)
  5. (DEFUN T11 (LST)
  6. (AND (cadr lst)
  7.    (setq lst1 (cons (list (car lst) (cadr lst)) lst1)
  8.           lst (cdr lst)
  9.     )
  10. (T11 LST))
  11. )
  12. (SETQ LST1 NIL)
  13. (T11 LST)
  14. (reverse lst1)
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 14:39:39 | 显示全部楼层
wowan1314 发表于 2013-5-26 14:34
又尝试写了个!
;;(SETQ LST '(1 2 3 4 5 6 7 8))
;;(T12 LST)=>((1 2) (2 3) (3 4) (4 5) (5 6) (6 7) ...

葛老,怎么不习惯用代码高亮发布?看着累。

好像你给弄出递归了?

点评

我以为会自动转呢!?  发表于 2013-5-26 14:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6656个

财富等级: 富甲天下

发表于 2013-5-26 15:18:12 | 显示全部楼层
另方:
(apply 'mapcar (cons 'list (list a (cdr a))))

点评

比6楼的更简化了  发表于 2013-5-26 17:03
又把我搞糊涂了!  发表于 2013-5-26 15:47

评分

参与人数 2D豆 +11 贡献 +1 收起 理由
XDSoft + 6 + 1 很给力!经验;技术要点;资料分享奖!
wowan1314 + 5 很经典!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-26 15:53:41 | 显示全部楼层

葛老,不是必须时候,不要用点评,点评别人回复不了你,就耽误了沟通。

论坛帖代码要点 <>按钮,或者直接手输入【code=lisp】【/code】,粗括号改成细的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-26 16:07:15 | 显示全部楼层
XDSoft 发表于 2013-5-26 15:53
葛老,不是必须时候,不要用点评,点评别人回复不了你,就耽误了沟通。

论坛帖代码要点 按钮,或者直 ...

收到! :lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-26 16:48:46 | 显示全部楼层
本帖最后由 wowan1314 于 2013-5-26 19:53 编辑
Underway 发表于 2013-5-26 15:18
另方:
(apply 'mapcar (cons 'list (list a (cdr a))))

加APPLY有什么特别的用么?
直接这样好像就可以
(mapcar 'list a (cdr a)) -------这应该是最简单的了
  1. ;;再来一个-----这样好像也可以
  2. (DEFUN T11 (A /  LST)
  3. (SETQ LST NIL)
  4. (foreach b a (setq lst (cons (list b (cadr a)) lst) a (cdr a)))
  5. (reverse (CDR LST))
  6. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-5-26 16:51:35 | 显示全部楼层
  1. ;;; 在哪里偷来的不记得了
  2. (DEFUN TXT-LST-SPLIT (LI N / RETURN A LEN)
  3.   (WHILE LI
  4.     (SETQ A   NIL
  5.           LEN (LENGTH LI)
  6.     )
  7.     (REPEAT (IF        (<= N LEN)
  8.               N
  9.               LEN
  10.             )
  11.       (SETQ A  (CONS (CAR LI) A)
  12.             LI (CDR LI)
  13.       )
  14.     )
  15.     (SETQ RETURN (CONS (REVERSE A) RETURN))
  16.   )
  17.   (REVERSE RETURN)
  18. )
  19. (DEFUN TH-LST-SPLIT (INPLST GP# / IDX LEN OUTLST SUBLST)
  20.   (WHILE INPLST
  21.     (SETQ IDX         -1
  22.           SUBLST NIL
  23.           LEN         (LENGTH INPLST)
  24.     )
  25.     (IF        (> GP# LEN)
  26.       (SETQ GP# LEN)
  27.     )
  28.     (WHILE (< (SETQ IDX (1+ IDX))
  29.               GP#
  30.            )
  31.       (SETQ SUBLST (CONS (NTH IDX INPLST) SUBLST))
  32.     )
  33.     (SETQ OUTLST (CONS (REVERSE SUBLST) OUTLST))
  34.     (REPEAT GP#
  35.       (SETQ INPLST (CDR INPLST))
  36.     )
  37.   )
  38.   (REVERSE OUTLST)
  39. )
  40. (DEFUN HAO-LST-SPLIT (LST N)
  41.   (IF LST
  42.     (CONS (TH-HOLD-LSTMN 0 (1- N) LST)
  43.           (HAO-LST-SPLIT
  44.             (TH-HOLD-LSTMN
  45.               N
  46.               (LENGTH LST)
  47.               LST
  48.             )
  49.             N
  50.           )
  51.     )
  52.   )
  53. )
  54. ;;; HAO-LST-SPLIT速度最慢
  55. (DEFUN TT-LST-SPLIT (LST N / RET OUT CNT)
  56.   (SETQ RET NIL)
  57.   (SETQ        CNT (- N (REM (LENGTH LST) N))
  58.         LST (REVERSE LST)
  59.   )
  60.   (WHILE LST
  61.     (SETQ RET (CONS (CAR LST) RET)
  62.           LST (CDR LST)
  63.     )
  64.     (IF        (ZEROP (REM (SETQ CNT (1+ CNT))
  65.                     N
  66.                )
  67.         )
  68.       (SETQ OUT        (CONS RET OUT)
  69.             RET        NIL
  70.       )
  71.     )
  72.   )
  73.   (IF RET
  74.     (CONS RET OUT)
  75.     OUT
  76.   )
  77. )
  78. (DEFUN T2-LST-SPLIT (LST N / A I LL)
  79.   (SETQ I 1)
  80.   (MAPCAR
  81.     '(LAMBDA (X)
  82.        (IF (< I N)
  83.          (SETQ A (CONS X A)
  84.                I (1+ I)
  85.          )
  86.          (SETQ LL (CONS (REVERSE (CONS X A)) LL)
  87.                A  NIL
  88.                I  1
  89.          )
  90.        )
  91.      )
  92.     LST
  93.   )
  94.   (REVERSE (IF A
  95.              (CONS (REVERSE A) LL)
  96.              LL
  97.            )
  98.   )
  99. )
  100. (DEFUN YBL-LST-SPLIT (LST N / M LL L)
  101.   (SETQ M (FIX (/ (LENGTH LST) N)))
  102.   (IF (ZEROP M)
  103.     LST
  104.     (PROGN
  105.       (REPEAT M
  106.         (REPEAT        N
  107.           (SETQ        LL  (CONS (CAR LST) LL)
  108.                 LST (CDR LST)
  109.           )
  110.         )
  111.         (SETQ L         (CONS LL L)
  112.               LL NIL
  113.         )
  114.       )
  115.       (IF LST
  116.         (APPEND
  117.           (REVERSE (MAPCAR
  118.                      'REVERSE
  119.                      L
  120.                    )
  121.           )
  122.           (LIST LST)
  123.         )
  124.         (REVERSE (MAPCAR
  125.                    'REVERSE
  126.                    L
  127.                  )
  128.         )
  129.       )
  130.     )
  131.   )
  132. )

评分

参与人数 1D豆 +5 收起 理由
牢固 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-1 16:19 , Processed in 0.438205 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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