Cangjie-仓颉编程-函数式编程

函数定义

C     C语言中,函数的声明告诉编译器函数的名称、返回类型和参数列表。函数的定义则提供了函数的实际体
C++   返回类型 函数名(参数列表) {// 函数体// 执行的操作// 返回返回类型的值}
Java  函数的定义分为函数的声明和函数的实现
Rust   使用 fn   关键字定义函数。函数的定义使用 fn关键字,后跟函数名、参数列表、返回类型和函数体
仓颉   使用 func 关键字 来表示函数定义的开始
Golang 使用 func function_name( [parameter list] ) [return_types] {
Swift ,使用 func 关键字定义。函数的基本结构包括函数名、参数列表、返回类型和函数体
Kotlin,使用 fun  关键字来定义一个函数
Scala, 使用 def 关键字定义的
python 使用 def 关键字 
JavaScript 使用关键字 function 定义函数。 函数可以通过声明定义,也可以是一个表达式
R语言  使用 function 关键字 来创建一个R函数 function_name <- function(arg_1, arg_2, ...) {  Function body }

 声明-定义-实现-调用-嵌套
    参数列表 --固定参数 变参  位置参数 命名参数 默认参数 生命周期 
    函数体--
    返回值 返回值类型
 函数调用--实参和形参 (作为参数,可以在传递时再定义其内容)
 函数类型---函数类型由函数的参数类型和返回类型组成,参数类型和返回类型之间使用 -> 连接
     函数类型是 () -> Unit,表示该函数没有参数,返回类型为 Unit
	 函数类型作为 参数类型 返回值类型  变量类型
 Lambda 表达式定义   之前为参数列表 =>  之后为 lambda 表达式体
闭包-- 变量捕获 
重复定义与函数重载 函数重载决议

尾随 lambda 
表示 数据流向的中缀操作符 |> (称为 pipeline)
表示 函数组合的中缀操作符 ~> (称为 composition)
变长参数

一等公民:函数可以:  it can be passed as a parameter, returned from a subroutine, or assigned into a variable.
  函数类型作为 参数类型 返回值类型  变量类型
动态改变函数实现的效果 

(1)Static Scope
   作用域和生存期时,函数里的本地变量只能在函数内部访问,
    函数退出之后,作用域就没用了,它对应的栈桢被弹出,作用域中的所有变量所占用的内存也会被收回
(2)闭包(Closure)对库的编写者来讲,它能隐藏内部实现细节
    内层函数一直访问它环境中的变量,不管外层函数退出与否
	  闭包是为了让函数能够在函数能作为值传递下继续运行所提供的一个方案
 	Dynamic Scope
	闭包的内在矛盾是运行时的环境和定义时的作用域之间的矛盾
 作用域和生存期这样的话语体系去解读
 
 操作符函数时需要在 func 关键字前面添加 operator 修饰符
 
 在编译时执行计算  在运行时执行
    public func map<T, R>(transform: (T) -> R): (Iterable<T>) -> Iterator<R>

从代码中学习语法

遍历区间 for-in 表达式可以遍历区间类型实例
区间类型字面量 左闭右开”区间的格式是 start..end : step

    定义函数-调用函数
    lambda表达式 以及 尾随 lambda 当函数调用有且只有一个 lambda 实参时,我们还可以省略 (),只写 lambda
    pipeline 表达式来简化描述

std.core    
    Rune 功能:表示 unicode 字符集中的字符	 
	   字符类型使用 Rune 表示,可以表示 Unicode 字符集中的所有字符
	     符 r 开头,后跟一个由一对单引号或双引号包含的字符。
	String 字符串类型使用 String 表示,用于表达文本数据,由一串 Unicode 字符组合而成	 struct String 
	    public func split(str: String, removeEmpty!: Bool = false): Array<String>
	Array<T> 数组类型 []
	
	func isNone()
	func isSome()
	 std 模块 » std.core 包 » 结构体 » func indexOf(String)
	public func isSome(): Bool 功能:判断当前实例值是否为 Some
	   	public enum Option<T> {
          | Some(T)
          | None
          }	
	
std.collection	
  map<T, R>((T) -> R)	创建一个映射。	
  collectArray<T>(Iterable<T>)	将一个迭代器转换成 Array 类型。
  flatten<T, R>(Iterable<T>) where T <: Iterable<R>	将嵌套的迭代器展开一层	

参考

https://gitcode.com/Cangjie/Cangjie-Examples/blob/main/Functional/string_split_2.cj
posted @ 2024-11-15 17:25  辰令  阅读(98)  评论(0)    收藏  举报