日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala---For语句段

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala---For语句段 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

For語句段
語法:
Expr1 ::= ?for? (?(? Enumerators ?)? | ?{? Enumerators
?}?) {nl} [?yield?] Expr
Enumerators ::= Generator {semi Enumerator}
Enumerator ::= Generator
| Guard
| ?val? Pattern1 ?=? Expr
Generator ::= Pattern1 ?<-? Expr [Guard]
Guard ::= ?if? PostfixExpr
for語句段for (enums) yield e對于由枚舉器enums產生的每個綁定求值表達式e。一個枚舉器序列總是由一個產生器開始;然后可跟其他產生器,值定義,或守衛。一個產生器 p <- e從一個與模式p匹配的表達式e產生綁定。值定義val p = e將值名稱p(或模式p中的數個名稱)綁定到表達式e的求值結果上。守衛if e包含一個布爾表達式,限制了枚舉出來的綁定。產生器和守衛的精確含義通過翻譯為四個方法的調用來定義:map filter flatMap和foreach。這些方法可以針對不同的攜帶類型具有不同的實現。
翻譯框架如下。在第一步里,每個產生器p <- e,對于e的類型被替換為如下形式,p不是不可反駁的(§8.1):
p <- e.filter { case p => true; case _ => false }
然后,以下規則將重復應用,直到所有的語句段都消耗完畢。
? for語句段 for (p <- e) yield e?被翻譯為e.map { case p => e? }
? for語句段 for (p <- e) e? 被翻譯為e.foreach { case p => e? }
? for語句段 for (p <- e; p? <- e? ...) yield e??, 這里...是一個產生器或守衛序列(可能為空),該語句段翻譯為 e.flatMap { case p => for(p? <- e? ...) yield e?? }
? for語句段 for (p <- e; p? <- e? ...) e??
這里... 是一個產生器或守衛序列(可能為空),該語句段翻譯為 e.foreach { case p => for (p? <- e? ...) e?? }
? 后跟守衛if g的產生器p <- e翻譯為單個產生器p <- e.filter((x1,...,xn) => g),這里x1,...,xn是p的自由變量。
? 后跟值定義val p? = e?的產生器 p <- e翻譯為以下值對產生器,這里的x和x?是新名稱: val (p, p?) <- for (x@p <- e) yield { val x?@p? = e?; (x, x?) }
示例6.19.1 以下代碼產生1到n-1間所有和為素數的數值對
for { i <- 1 until n
j <- 1 until i
if isPrime(i+j)
} yield (i, j)
該for語句段翻譯為:
(1 until n)
.flatMap {
case i => (1 until i)
.filter { j => isPrime(i+j) }
.map { case j => (i, j) }
示例6.19.2 for語句段可以用來簡明地描述向量和矩陣算法。比如以下就是一個函數來計算給定矩陣的轉置:
def transpose[A](xss: Array[Array[A]]) = {
for (i <- Array.range(0, xss(0).length)) yield
for (xs <- xss) yield xs(i)
}
以下是一個函數,用來計算兩個向量的無向量積:
def scalprod(xs: Array[Double], ys: Array[Double]) = {
var acc = 0.0
for ((x, y) <- xs zip ys) acc = acc + x * y
acc
}
最后,這是一個求兩個矩陣的積的函數。可以與示例 6.15.1中的常見版本做一個比較
def matmul(xss: Array[Array[Double]], yss: Array[Array[Double]] = {
val ysst = transpose(yss)
for (xs <- xss) yield
for (yst <- ysst) yield
scalprod(xs, yst)
}

以上代碼使用了類scala.Array中已有定義的成員map, flatMap, filter和foreach。

更多精彩內容請關注:http://bbs.superwu.cn

關注超人學院微信二維碼:

關注超人學院java免費學習交流群:

轉載于:https://my.oschina.net/crxy/blog/424359

總結

以上是生活随笔為你收集整理的Scala---For语句段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: xxxxxx日本| 毛片免费播放 | 30一40一50老女人毛片 | 欧美精品一级片 | 欧美hdxxxx| 自拍偷拍 亚洲 | 国产黄色特级片 | 国产做爰视频免费播放 | h毛片| 国产麻豆a毛片 | 亚洲精品视频在线播放 | 夜夜草网 | 男女爽爽| 潘金莲激情呻吟欲求不满视频 | 777奇米视频 | 久久艹在线 | 亚洲深夜福利 | 亚洲一区二区三区四区在线观看 | 麻豆av一区二区三区在线观看 | 精品一区二区三区在线免费观看 | 欧美亚洲综合另类 | 精品一区二区三区日韩 | 毛片无码一区二区三区a片视频 | 日韩高清一二三区 | 黄色污污视频软件 | 亚洲乱码一区二区 | 亚洲毛茸茸 | yjizz国产| 天天色天天草 | 欧美三日本三级少妇三级99观看视频 | 日本资源在线 | 国内精品91 | 国产欧美精品一区二区色综合 | 99精品视频在线播放免费 | 久久国产视频网 | 中文字幕在线日亚洲9 | 香蕉视频在线免费播放 | 午夜老司机福利 | 成人欧美一区 | 91色综合 | 欧美午夜三级 | 亚洲v欧美v | 成人91视频| 理论片av | 中文字幕高清一区 | 日韩午夜毛片 | 欧美做受高潮1 | 草久久久 | 一本久久精品一区二区 | 日韩视频免费在线播放 | 手机在线看片日韩 | www日韩在线 | 成年人免费网站在线观看 | 宅男深夜视频 | 久久午夜av| 欧美日韩不卡 | 国内自拍视频在线观看 | 久久久久99精品成人片毛片 | 亚洲欧美黄 | av免费在线观看网址 | 美女网站免费观看视频 | 日本大尺度吃奶做爰久久久绯色 | 精品中文字幕视频 | 最近最好的2019中文 | 亚洲av综合永久无码精品天堂 | 国产三级国产精品国产国在线观看 | 国产男男网站 | 亚洲激情a| 国产精品第二十页 | 日韩国产欧美在线视频 | 庆余年三 | 国产精品99 | 五月激情婷婷网 | 人妻中文字幕一区二区三区 | 免费一区二区三区 | 日韩天堂av | 日韩精品人妻中文字幕有码 | 国产a级大片 | 国产日韩欧美久久 | 午夜一二三区 | 一级肉体全黄裸片 | 日本大乳美女 | 天堂网8| 一个人在线观看免费视频www | 色屁屁ts人妖系列二区 | 一本大道av伊人久久综合 | 人人干干人人 | 日韩1区2区3区| 国产一区视频在线观看免费 | 大尺度一区二区 | 欧美日韩一二三区 | 久久av无码精品人妻系列试探 | a级一级黄色片 | 亚洲精品久久久久久久久久久久久 | 日本色中色 | 超碰97观看| 大陆一级片 | 香蕉911 | 国产精品无码999 |