程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言實現Lambda表達式,lambda表達式

C語言實現Lambda表達式,lambda表達式

編輯:關於C語言

C語言實現Lambda表達式,lambda表達式


前言

     先來啰嗦幾句,身邊的朋友,同事都喜歡在博客上記錄自己在學習計算機編程技術路程上的一些問題和心得。就我個人而言,這是個好習慣,特別是在計算機編程領域,技術方向種類繁多,永無止境。所以,我也開始我人生中第一份博客,希望看到的朋友多多鼓勵和討論,在此謝過。對於計算技術,越是深入越越數學掛鉤,想達到大神級別,嗯,我是有自知之明的。計算機技術雖然之多,並不需要我們每一個領域每一項技術都特別的精通。當然,能做到,我由衷的佩服和羨慕,只要我們專注於某些技術領域並能達到“精通”兩個字就已經很不容易,畢竟精神和身體耗損太大,一般人難以達到包羅萬象。個人特別喜歡C語言,用其研發已有6年多的時間,一直很熱衷,時不時的學習其它語言,使用C語言來模仿它們有意思的技術。下面就由讀者和我一起來看看使用C語言實現Lambda表達式。

什麼是Lambda表達式

     “Lambda 表達式”(Lambda Expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(注意和數學傳統意義上的不同)。

C-Lambda表達式

    C語言實現Lambda表達式,一般來說都是通過宏定義來的,這樣就可以使用類似Lambda(...)這樣形式,請看下面:

         #define cgs_lambda( return_type, function_body) \

                ({return_type cgs_lambda_func function_body cgs_lambda_func;})

     上述,就是Lambda表達式的宏定義,“cgs_”前綴是我在自己的項目中使用的,不是重點。重點在於( return_type, function_body)使用在({return_type cgs_lambda_func function_body cgs_lambda_func;})語句,return_type為返回類型,function_body為Lambda表達式中匿名函數的函數體。注意,中間cgs_lambda_func其實就是匿名的函數名,最後的cgs_lambda_func的作用表示函數的地址就定義在此,如何使用cgs_lambda表達式,我們通過一個簡單的實例做進一步分析。

使用C-Lambda表達式

完整代碼如下:

#include <stdio.h>

 

/** 這裡是我們定義的Lambda表達式的宏定義 */

#define cgs_lambda( return_type, function_body) \

       ({return_type cgs_lambda_func function_body cgs_lambda_func;})

 

/*************************** 測試Main **************************/

int main( int argc, const char **argv)

{

  /** 我們做兩個數相加的操作 */

     printf( "Sum = %d\n", cgs_lambda( int, (int x, int y){ return x + y; })(3, 4) );

 

  return 0;

}

 

可以通過編譯和運行試試,運行結果為:Sum = 7

      好了,我們來講解一下,return_type為int型,function_body為帶兩個入參的函數體(int x, int y){ return x + y; },後面的(3, 4)就是我們調用cgs_lambda_func傳的入參。這樣應該知道cgs_lambda表達式中最有一個“cgs_lambda_func;”的作用了,別忘了末尾的分號“;",否則編譯不過去的。

      我們來翻譯上述我們示例中的cgs_lambda表達式編譯過後是什麼樣子,如下:

      ({int cgs_lambda_func (int x, int y){ return x + y; } cgs_lambda_func;})(3, 4)

結束語

      非常感謝讀者的耐心細讀,我會慢慢更新我的博客,也會做好我的博客,最近自己在忙於寫網絡服務器方面的小型框架,謝謝您的關注,祝您身體健康,萬事如意。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved