You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Maxima的load函数通过通配符搜索指定目录的所有子目录?

实现Maxima自动添加指定目录的所有子目录到file_search_maxima

Maxima自带的file_search_maxima不支持###/###.mac这种递归通配写法,但可以通过自定义代码遍历目录结构,自动生成并追加子目录的搜索模式。

方法1:添加指定目录的直接子目录

如果只需要添加父目录下的一级子目录,可使用以下函数:

add_direct_subdirs_to_file_search(parent_dir) := block(
    [subdirs, patterns],
    // 获取父目录下的所有直接子目录(仅目录,排除文件)
    subdirs: directory(parent_dir, "*/"),
    // 生成每个子目录对应的搜索模式
    patterns: map(lambda([d], concat(d, "###.mac")), subdirs),
    // 追加到file_search_maxima
    file_search_maxima: append(file_search_maxima, patterns)
)$

使用示例:

// 替换为你的目标父目录
add_direct_subdirs_to_file_search("/usr/local/")$

方法2:递归添加所有层级的子目录

如果需要包含父目录下所有嵌套层级的子目录,用递归函数实现:

add_all_subdirs_to_file_search(parent_dir) := block(
    [subdirs, patterns],
    // 获取当前目录下的直接子目录
    subdirs: directory(parent_dir, "*/"),
    // 生成当前子目录的搜索模式
    patterns: map(lambda([d], concat(d, "###.mac")), subdirs),
    // 递归处理每个子目录的子目录
    for d in subdirs do (
        patterns: append(patterns, add_all_subdirs_to_file_search(d))
    ),
    // 追加到全局搜索列表
    file_search_maxima: append(file_search_maxima, patterns),
    patterns
)$

使用示例:

add_all_subdirs_to_file_search("/usr/local/")$

关键说明

  • file_search_maxima中的###仅匹配文件名,无法匹配目录层级,所以你之前尝试的"/usr/local/###/###.mac"写法无效,它会寻找名为###的目录,而非任意子目录。
  • 注意路径格式:确保父目录路径结尾带斜杠(如/usr/local/),避免生成错误的路径。
  • 跨平台兼容:Maxima的directory函数在Windows、Linux、macOS上的路径处理略有差异,建议在目标系统上测试函数。
  • 权限问题:确保Maxima进程有权限访问目标目录及其子目录。

当你新增子目录后,只需重新调用对应的函数,就能自动将新子目录添加到搜索路径中,无需手动逐个配置。

内容的提问来源于stack exchange,提问作者Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:57:31