-
尾遞歸函數(shù)
尾遞歸函數(shù)(Tail Recursive Function)中所有遞歸形式的調(diào)用都出現(xiàn)在函數(shù)的未尾。
當(dāng)編譯器檢測(cè)到一個(gè)函數(shù)調(diào)用是尾遞歸的時(shí)候,它就覆蓋當(dāng)前的活動(dòng)記錄而不是在棧中去創(chuàng)建一個(gè)新的。查看全部 -
注意尾遞歸函數(shù)的寫法,loop 函數(shù)定義了兩個(gè)參數(shù)表示區(qū)間變量和累加和,這是關(guān)鍵。另外,f(x)函數(shù)用匿名推導(dǎo)來定義,靈活的推廣到二階和三階求和。查看全部
-
# 函數(shù)式編程
> 命令式編程在理論上上升到語言學(xué)的層次,不可判定的問題很多,且為了實(shí)用引人更多的模糊地帶,是不夠嚴(yán)密的。而函數(shù)式編程關(guān)心語義,從數(shù)理邏輯出發(fā)建立基礎(chǔ),例如三大語義,泛代數(shù),可靠性完備性,合流,規(guī)約等概念,體系上更嚴(yán)密。而且視公理化為頭等大事。 - https://www.zhihu.com/question/36782552
- 函數(shù)式編程是一種編程范式
## 范式(Paradigm)
- 范式包括 philosophy (理念) 和 methods (方法)兩部分
? ? 1. 某事的 philosophy (理念) 就是,做某事,什么該做,什么不該做,以及方式
? ? 2. Methods (方法)就是繼方式之后的具體的操作
## 函數(shù)式編程沒有副作用
> 副作用指的是函數(shù)內(nèi)部與外部互動(dòng)(最典型的情況,就是修改全局變量的值),產(chǎn)生運(yùn)算以外的其他結(jié)果。函數(shù)式編程強(qiáng)調(diào)沒有"副作用",意味著函數(shù)要保持獨(dú)立,所有功能就是返回一個(gè)新的值,沒有其他行為,尤其是不得修改外部變量的值。
```scala
var x=1
def XPlusY_v1(y: Int)=x+y
def XPlusY_v2(y: Int)={x+y;x} //有副作用,改變了x的值
```
## 函數(shù)式編程引用透明
- 對(duì)于相同的輸入,總是得到相同的輸出
- 如果f(x)的參數(shù)x和函數(shù)體都是透明的,那么函數(shù)f(x)是純函數(shù)
```scala
var x = new StringBulider("Hello")
var y = x.append(" World!") //Hello World!
var z = x.append(" World!") //Hello World! World!
// appned 方法違反了引用透明性
```
### 不變性 Immutability
- 為了獲得引用透明性,任何值都不能變
## 表達(dá)式求值
1. 嚴(yán)格求值 call by value
2. 非嚴(yán)格求值 call by name
查看全部 -
try catch finally 跟Java差不多 只不過catch這里是個(gè)表達(dá)式
code match 類似switch
查看全部 -
if條件判斷 沒有設(shè)置值默認(rèn){}
for循環(huán) s <- l? 賦值? yield配合變量將新的值打印出來
查看全部 -
Scala的函數(shù)可以足夠聰明知道函數(shù)的返回值類型 Scala的函數(shù)簡(jiǎn)單的一行表達(dá)式不需要函數(shù)括號(hào)
查看全部 -
底精度變量可以直接向高精度變量轉(zhuǎn)換
Unit 表示無值,和其他語言中void等同,用作不返回任何結(jié)果的方法的結(jié)果類型。Unit只有一個(gè)實(shí)例值,寫成()。
Nothing Nothing類型在Scala的類層級(jí)的最低端;它是任何其他類型的子類型。函數(shù)出錯(cuò)會(huì)返回Nothing。
函數(shù)定義
def?main(args:?Array[String]):?Unit?=?{}
字符串占位符:
var?e?=?"bob"; println(s"your?name?is?${e}")
查看全部 -
三種變量修飾符 val?定義常量,不可修改 var?定義變量 lazy?val?只要第一次使用到時(shí)候,才會(huì)運(yùn)算表達(dá)式得到值 可以不顯示指定變量的類型,因?yàn)镾cala會(huì)自動(dòng)進(jìn)行類型推導(dǎo)
查看全部 -
Scala里有兩種求值策略(Evaluation?Strategy) Call?By?Value?-?對(duì)函數(shù)實(shí)參求值,且僅求值一次 Call?By?Name?-?函數(shù)實(shí)參每次在函數(shù)體內(nèi)被用到時(shí)都會(huì)求值
查看全部 -
try 在Scala里面不是一個(gè)語句,而是一個(gè)表達(dá)式
查看全部 -
Scala的for循環(huán)和Java的有很大差異,但基本原理是一致的。
查看全部 -
1.?在Scala?IDE中有一個(gè)很便捷的功能,那就是WorkSheet 它類似于交互式命令行的代碼測(cè)試,在Worksheet輸入scala表達(dá)式,保存以后會(huì)立即得到程序運(yùn)行的結(jié)果 2.?Scala的函數(shù)可以足夠聰明知道函數(shù)的返回值類型 3.?Scala的函數(shù)簡(jiǎn)單的一行表達(dá)式不需要函數(shù)括號(hào)
查看全部 -
底精度變量可以直接向高精度變量轉(zhuǎn)換
Unit 表示無值,和其他語言中void等同,用作不返回任何結(jié)果的方法的結(jié)果類型。Unit只有一個(gè)實(shí)例值,寫成()。
Nothing Nothing類型在Scala的類層級(jí)的最低端;它是任何其他類型的子類型。函數(shù)出錯(cuò)會(huì)返回Nothing。
查看全部 -
三種變量修飾符 val?定義常量,不可修改 var?定義變量 lazy?val?只要第一次使用到時(shí)候,才會(huì)運(yùn)算表達(dá)式得到值 可以不顯示指定變量的類型,因?yàn)镾cala會(huì)自動(dòng)進(jìn)行類型推導(dǎo)
查看全部 -
Install?Java?JDK Download?Scala Install?SBT REPL?(Read?Evaluate?Print?Loop) Install?Scala?IDE
查看全部
舉報(bào)