[博客翻译]GNU Make标准库


原文地址:https://gmsl.jgc.org/


GNU Make 标准库

GNU Make 标准库(GMSL)是一个使用原生 GNU Make 功能实现的函数集合,提供了列表和字符串操作、整数运算、关联数组、栈以及调试工具。GMSL 以 BSD 许可证发布。[项目页面] [发布版本]

使用 GMSL

需要两个文件:gmsl__gmsl。要在你的 Makefile 中包含 GMSL,可以这样做:

include gmsl

gmsl 会自动包含 __gmsl。要检查你使用的 GMSL 版本是否正确,可以使用 gmsl_compatible 函数(见下文)。当前版本是 1.2.3。GMSL 包还包含一个测试套件,只需运行 make -f gmsl-tests 即可。

逻辑运算符

GMSL 提供了布尔值 $(true)(非空字符串)和 $(false)(空字符串)。以下运算符可以与这些变量一起使用:

  • not
    参数:一个布尔值
    返回值:如果布尔值为 $(false),则返回 $(true),反之亦然。
  • and
    参数:两个布尔值
    返回值:如果两个布尔值都为 $(true),则返回 $(true)
  • or
    参数:两个布尔值
    返回值:如果任意一个布尔值为 $(true),则返回 $(true)
  • xor
    参数:两个布尔值
    返回值:如果恰好一个布尔值为 $(true),则返回 $(true)
  • nand
    参数:两个布尔值
    返回值:返回 not and 的结果。
  • nor
    参数:两个布尔值
    返回值:返回 not or 的结果。
  • xnor
    参数:两个布尔值
    返回值:返回 not xor 的结果。

列表操作函数

列表是一个由空格分隔的字符串。以下是常用的列表操作函数:

  • first
    参数:1: 一个列表
    返回值:返回列表的第一个元素。
  • last
    参数:1: 一个列表
    返回值:返回列表的最后一个元素。
  • rest
    参数:1: 一个列表
    返回值:返回去掉第一个元素的列表。
  • chop
    参数:1: 一个列表
    返回值:返回去掉最后一个元素的列表。
  • map
    参数:1: 要对列表每个元素调用的函数名 2: 要遍历的列表
    返回值:对每个元素调用函数后的列表。
  • pairmap
    参数:1: 要对每对元素调用的函数名 2: 第一个列表 3: 第二个列表
    返回值:对每对元素调用函数后的列表。
  • fold
    参数:1: 要对列表每个元素调用的函数名(该函数接受两个参数) 2: 要遍历的列表 3: 列表结束时使用的“零”元素
    返回值:对每个元素调用函数后的结果。
  • leq
    参数:1: 要比较的列表 2: 另一个列表
    返回值:如果两个列表相同,则返回 $(true)
  • lne
    参数:1: 要比较的列表 2: 另一个列表
    返回值:如果两个列表不同,则返回 $(true)
  • reverse
    参数:1: 要反转的列表
    返回值:反转后的列表。
  • uniq
    参数:1: 要去重的列表
    返回值:去重后的列表。
  • length
    参数:1: 一个列表
    返回值:列表中的元素数量。

字符串操作函数

字符串是任意字符序列。以下是常用的字符串操作函数:

  • seq
    参数:1: 要比较的字符串 2: 另一个字符串
    返回值:如果两个字符串相同,则返回 $(true)
  • sne
    参数:1: 要比较的字符串 2: 另一个字符串
    返回值:如果两个字符串不同,则返回 $(true)
  • strlen
    参数:1: 一个字符串
    返回值:返回字符串的长度。
  • substr
    参数:1: 一个字符串 2: 起始偏移量(从1开始) 3: 结束偏移量(包含)
    返回值:返回子字符串。
  • split
    参数:1: 分隔字符 2: 要分割的字符串
    返回值:将字符串按分隔字符分割成列表。
  • merge
    参数:1: 分隔字符 2: 要合并的列表
    返回值:将列表合并为单个字符串,元素之间用分隔字符分隔。
  • tr
    参数:1: 要替换的字符列表 2: 替换后的字符列表 3: 要翻译的文本
    返回值:返回翻译后的文本。
  • uc
    参数:1: 要转换为大写的文本
    返回值:返回大写的文本。
  • lc
    参数:1: 要转换为小写的文本
    返回值:返回小写的文本。

集合操作函数

集合由排序且去重的列表表示。以下是常用的集合操作函数:

  • set_create
    参数:1: 集合元素列表
    返回值:返回新创建的集合。
  • set_insert
    参数:1: 要添加到集合的元素 2: 一个集合
    返回值:返回添加元素后的集合。
  • set_remove
    参数:1: 要从集合中移除的元素 2: 一个集合
    返回值:返回移除元素后的集合。
  • set_is_member
    参数:1: 一个元素 2: 一个集合
    返回值:如果元素在集合中,则返回 $(true)
  • set_is_not_member
    参数:1: 一个元素 2: 一个集合
    返回值:如果元素不在集合中,则返回 $(false)
  • set_union
    参数:1: 一个集合 2: 另一个集合
    返回值:返回两个集合的并集。
  • set_intersection
    参数:1: 一个集合 2: 另一个集合
    返回值:返回两个集合的交集。
  • set_is_subset
    参数:1: 一个集合 2: 另一个集合
    返回值:如果第一个集合是第二个集合的子集,则返回 $(true)
  • set_equal
    参数:1: 一个集合 2: 另一个集合
    返回值:如果两个集合相同,则返回 $(true)

整数运算函数

整数由等量的 x 表示。例如,数字 4 表示为 x x x x。以下是常用的整数运算函数:

  • int_decode
    参数:1: 由 x 表示的数字
    返回值:返回由 x 表示的整数。
  • int_encode
    参数:1: 一个整数
    返回值:返回由 x 表示的整数。
  • int_plus
    参数:1: 由 x 表示的数字 2: 另一个由 x 表示的数字
    返回值:返回两个数字的和。
  • plus
    参数:1: 一个整数 2: 另一个整数
    返回值:返回两个整数的和。
  • int_subtract
    参数:1: 由 x 表示的数字 2: 另一个由 x 表示的数字
    返回值:返回两个数字的差,如果出现下溢则输出错误。
  • subtract
    参数:1: 一个整数 2: 另一个整数
    返回值:返回两个整数的差,如果出现下溢则输出错误。
  • int_multiply
    参数:1: 由 x 表示的数字 2: 另一个由 x 表示的数字
    返回值:返回两个数字的乘积。
  • multiply
    参数:1: 一个整数 2: 另一个整数
    返回值:返回两个整数的乘积。
  • int_divide
    参数:1: 由 x 表示的数字 2: 另一个由 x 表示的数字
    返回值:返回第一个数字除以第二个数字的整数结果。
  • divide
    参数:1: 一个整数 2: 另一个整数
    返回值:返回第一个整数除以第二个整数的结果。
  • int_modulo
    参数:1: 由 x 表示的数字 2: 另一个由 x 表示的