倉頡_Cangjie-函數語言程式設計

辰令發表於2024-11-15

函式定義

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

相關文章