专栏名称: 待字闺中
深度分析大数据、深度学习、人工智能等技术,切中实际应用场景,为大家授业解惑。间或,也会介绍国内外相关领域有趣的面试题。
目录
相关文章推荐
程序员的那些事  ·  余承东暗讽某大厂,雷军疑似回应“诋毁是仰望” ... ·  3 天前  
稀土掘金技术社区  ·  URL地址末尾加不加”/“有什么区别 ·  3 天前  
稀土掘金技术社区  ·  为了让 iframe 支持 ... ·  2 天前  
老刘说NLP  ·  两个有趣的工作:Huggingface知识图 ... ·  昨天  
程序员小灰  ·  39岁的小灰,再也回不去童年了! ·  3 天前  
51好读  ›  专栏  ›  待字闺中

让你脑洞大开的AI交流方式

待字闺中  · 公众号  · 程序员  · 2025-03-17 14:30

正文

请到「今天看啥」查看全文


  • 模式解构 :支持递归模式匹配

  • 无循环结构 :通过递归和集合操作替代

  • 类型后缀 :变量类型通过后缀声明(如 arr@list

  • 智能下标 a[自动取中位数, a[^n] 倒数索引


  • 二、语法示例

    1. 快速排序

    qsort: (list@list) => {    [] -> []  // 空列表模式    [pivot, ...rest] -> {        rest        <> filter(_ <= pivot@)  // 左侧处理        <> qsort        <> merge (            [pivot],            rest            <> filter(_ > pivot@)            <> qsort        )    }}
    // 执行示例[9,3,7,5] <> qsort <> print // 输出[3,5,7,9]

    2. 二分查找

    bsearch: (target@num, arr@list) => {    // 模式匹配解构区间    (low@num, high@num) -> {        low > high@ => -1        _ -> {            mid = (low + high) // 2            arr[mid@] -> {                _ == target@ => mid                _ < target@ => (mid+1, high@) <> recur  // 递归调用                _ > target@ => (low@, mid-1) <> recur            }        }    } @ (0, arr<>len-1)  // 初始区间}
    // 执行示例[2,4,6,8,10] <> bsearch(6) <> print // 输出2

    3. KMP字符串匹配

    kmp: (pattern@str, text@str) => {    // 构建部分匹配表    pmt = pattern    <> chars@    <> scan (0, [0]@list) {        (i@num, (len, table)@tuple) -> {            len > 0 and pmt[i@] != pmt[len@]                 => (table[len-1@], table)            pmt[i@] == pmt[len@]                 => (len+1, table<>append(len+1))            _ => (0, table<>append(0))        }    } <> last  // 取最终PMT        // 匹配阶段    text <> chars@    <> scan (0, 0) {        (i@num, (j, pos)@tuple) -> {            j == pattern<>len => break pos - j@            chars[i@] == pmt[j@]                 => (i+1, j+1)            j > 0 => (i, pmt[j-1@])            _ => (i+1, 0)        }    } <> or(-1)}
    // 执行示例"ABABDABACD" <> kmp("ABAC") <> print // 输出6

    三、语言创新点

    双向数据流:

    // 传统方式process3(process2(process1(data)))
    // FlowScript方式data <> process1 <> process2 <> process3// 或反向执行process3 < process2 < process1 < data

    智能索引系统

    arr = [1,3,5,7,9]arr[// 取中位数5arr[^1]   // 倒数第一个元素9arr[2..// 从索引2到中间:[5,7]

    递归模式匹配

    factorial: (n@num) => {    0|1 -> 1    _ -> n * (n-1)<>factorial}

    类型后缀系统

    price@num = 99.9     // 数值类型name@str = "Flow"    // 字符串类型matrix@grid = [[1,2],[3,4]]  // 二维网格

    四、设计哲学

    1. 读写一致性 :代码执行方向与阅读顺序一致

    2. 零副作用 :所有数据操作产生新对象

    3. 渐进类型 :动态类型为主,关键位置可加类型约束







    请到「今天看啥」查看全文