原文:C#中的函數式編程:遞歸與純函數(二)

在序言中,我們提到函數式編程的兩大特征:無副作用 函數是第一公民。現在,我們先來深入第一個特征:無副作用。 無副作用是通過引用透明 Referential transparency 來定義的。如果一個表達式滿足將它替換成它的值,而程序的行為不變,則稱這個表達式是引用透明的。 現在,我們不妨進行一個嘗試:我們來實現一些函數,但是這次有一個限制:只能用無副作用的表達式。 先以素數判定為例子,我們要寫一 ...

2018-04-04 16:28 2 791 推薦指數:

查看詳情

C#函數式編程遞歸調用

關於遞歸相信大家已經熟悉的不能再熟悉了,所以筆者在這里就不多費口舌,不懂的讀者們可以在博客園中找到很多與之相關的博客。下面我們直接切入正題,開始介紹尾遞歸。 尾遞歸 普通遞歸和尾遞歸如果僅僅只是從代碼的角度出發來看,我們可能發現不了他的特點,所以筆者利用兩張堆棧 ...

Mon Jan 26 19:19:00 CST 2015 5 4516
C#函數式編程:序言(一)

學了那么久的函數式編程語言,一直想寫一些相關的文章。經過一段時間的考慮,我決定開這個坑。 至於為什么選擇C#,在我看來,編程語言分三類:一類是難以進行函數式編程的語言,這類語言包括Java6、C語言等。這類語言由於不支持匿名函數等特性,進行函數式編程會比較困難;一類是自稱“函數式編程語言”的語言 ...

Wed Mar 14 04:38:00 CST 2018 1 932
C#函數式編程

提起函數式編程,大家一定想到的是語法高度靈活和動態的LISP,Haskell這樣古老的函數式語言,往近了說ruby,javascript,F#也是函數式編程的流行語言。然而自從.net支持了lambda表達式,C#雖然作為一種指令程序設計語言,在函數式編程方面也毫不遜色。我們在使用c#編寫代碼 ...

Mon Apr 06 23:59:00 CST 2015 5 9886
C# 函數式編程:LINQ

一直以來,我以為 LINQ 是專門用來對不同數據源進行查詢的工具,直到我看了這篇十多年前的文章,才發現 LINQ 的功能遠不止 Query。這篇文章的內容比較高級,主要寫了用 C# 3.0 推出的 LINQ 語法實現了一套“解析器組合子(Parser Combinator)”的過程。那么這個組合 ...

Sun Sep 30 23:01:00 CST 2018 6 1228
C#函數式編程 - 1

最近閑下來了,准備出一個 C# 搞 FP 的合集。本合集所有代碼均以 C# 8 為示例。 可能你說,為什么要這么做呢?回答:為了好玩。另外,意義黨們請 gun cu ke! C# 有委托,而且有 Func<> 和 Action<>,可以說函數被視為一等功 ...

Mon Sep 09 00:18:00 CST 2019 8 1505
C# 函數式編程 —— 使用 Lambda 表達式編寫遞歸函數

最近看了趙姐夫的這篇博客http://blog.zhaojie.me/2009/08/recursive-lambda-expressions.html,主要講的是如何使用 Lambda 編寫遞歸函數。其中提到了不動點組合子這個東西,這個概念來自於函數式編程的世界,直接理解起來可能有些困難,所以我 ...

Mon Dec 25 22:17:00 CST 2017 5 1235
C#函數式編程 - 3

前言 今天和某個人聊天聊到了 C# 的 LINQ,發現我認識的 LINQ 似乎和大多數人認識的 LINQ 不太一樣,怎么個不一樣法呢?其實 LINQ 也可以用來搞函數式編程。 當然,並不是說寫幾個 lambda 和用用像 Java 那樣的 stream 之類的就算叫做 LINQ 了,LINQ ...

Sun Mar 29 08:10:00 CST 2020 2 902
C#函數式編程 - 2

前一陣子在寫 CPU,導致一直沒有什么時間去做其他的事情,現在好不容易做完閑下來了,我又可以水文章了哈哈哈哈哈。 有關 FP 的類型部分我打算放到明年再講,因為現有的 C# 雖然有一個 pattern matching expressions,但是沒有 discriminated unions ...

Mon Dec 09 07:39:00 CST 2019 1 824
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM