乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 5|回复: 5

[编程交流] 参数函数,创建inne

[复制链接]

46

主题

92

帖子

45

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
235
发表于 2022-7-6 06:13:49 | 显示全部楼层 |阅读模式
此函数使用子列表的每个元素创建
  1. (defun fun (L)
  2. (apply 'list (mapcar '(lambda (%) (list %)) L)))

 
  1. '(1 2 3 -4) --> '((1) (2) (3) (-4))

 
如何创建分为三个元素之一的函数?
 
例子:
  1. '(1 2 3 4 5 6 3 3 3 2 2 2) --> '((1 2 3) (4 5 6) (3 3 3) (2 2 2))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:27:33 | 显示全部楼层
考虑以下通用分组函数:
 
  1. ;; Group by N  -  Lee Mac
  2. ;; Groups a list into a list of lists, each of length n
  3. (defun LM:groupn ( l n / r x )
  4.    (repeat (/ (length l) n)
  5.        (repeat n
  6.            (setq x (cons (car l) x)
  7.                  l (cdr l)
  8.            )
  9.        )
  10.        (setq r (cons (reverse x) r)
  11.              x nil
  12.        )
  13.    )
  14.    (if l (setq r (cons l r)))
  15.    (reverse r)
  16. )

 
  1. _$ (LM:groupn '(1 2 3 4 5 6 3 3 3 2 2 2) 3)
  2. ((1 2 3) (4 5 6) (3 3 3) (2 2 2))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:49:00 | 显示全部楼层
这是一种递归方法,但依赖于AutoLISP的动态范围:
  1. (defun f ( l n )
  2.    (if (< n (length l))
  3.        (cons (g l n) (f l n))
  4.        (list l)
  5.    )
  6. )
  7. (defun g ( a b )
  8.    (if (< 0 b)
  9.        (cons (car a) (g (setq l (cdr a)) (1- b)))
  10.    )
  11. )

或者,交叉递归版本:
  1. (defun f ( l n )
  2.    (if (< n (length l))
  3.        (g l n nil n)
  4.        (list l)
  5.    )
  6. )
  7. (defun g ( a b c d )
  8.    (if (< 0 b)
  9.        (g (cdr a) (1- b) (cons (car a) c) d)
  10.        (cons (reverse c) (f a d))
  11.    )
  12. )
  1. _$ (f '(1 2 3 4 5 6) 2)
  2. ((1 2) (3 4) (5 6))
回复

使用道具 举报

46

主题

92

帖子

45

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
235
发表于 2022-7-6 06:52:48 | 显示全部楼层
非常感谢李!
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 07:02:20 | 显示全部楼层
“旧”线程:http://www.theswamp.org/index.php?topic=41419.5 ... 尽管有更古老的线索:见李的第二篇文章。
 
更不用说:http://www.theswamp.org/index.php?topic=5108.0
 
当然,在某个地方可能有一个更古老的线索,我总是惊讶于实际上只有那么少的“新”事物
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:21:17 | 显示全部楼层
我同意-考虑到LISP语言有多么古老,你几乎可以保证在过去的某个时候别人已经做了一些事情
 
尽管如此,我仍然非常喜欢重新审视这些问题,并尝试想出新的、新颖的方法来解决它们
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 18:53 , Processed in 0.772443 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表