找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 79|回复: 0
打印 上一主题 下一主题

[求助] skill是否不能正常使用递归?

[复制链接]

15

主题

112

帖子

672

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
672
跳转到指定楼层
1#
发表于 2017-7-31 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

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

x
本帖最后由 leilei4908 于 2017-7-31 15:45 编辑
  1. procedure(getFiles(@optional (path ".") (files nil) (Sub nil))
  2. prog(()
  3.    unless(isDir(path) return(files))
  4.    foreach(obj getDirFiles(path)
  5.       when(Sub && obj != "." && obj != ".."
  6.          when(isDir(obj) files = getFiles(obj files Sub))
  7.       )
  8.       ; when(isFile(obj) files = cons(simplifyFilename(obj) files))
  9.       when(isFile(obj) files = cons(obj files))
  10.    )
  11.    return(files)
  12. ))
复制代码

大神帮我看下这个哪里有错误
代码目的是利用递归,获取所有文件夹及子文件夹内的文件

这个只能获取到第一级文件夹内的文件,不能获取子文件夹的

上面的错误主要是:
1.子文件夹的文件名不能通过isFile判断文件是否存在
2.simplifyFilename不能将子文件夹扩展成完整路径


  1. procedure(getFiles(@optional (path ".") (files nil) (Sub nil))
  2. let((objs obj)
  3.    path = simplifyFilename(path)
  4.    objs = isDir(path) && getDirFiles(path) || nil
  5.    foreach(obj objs
  6.       fullpath = strcat(path "\\" obj)
  7.       when(Sub && isDir(fullpath)
  8.          when(obj != "." && obj != ".." files = getFiles(fullpath files Sub))
  9.       )
  10.       when(isFile(fullpath) files = cons(fullpath files))
  11.    )
  12.    files
  13. ))
复制代码

这个能解决上面的问题,但是不知道为什么,获取的文件有重复项


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-9-20 12:15 , Processed in 0.053791 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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