Option Sequence

package option

object Sequence {

  def sequence[A](a: List[Option[A]]): Option[List[A]] = a match {
    case Nil    => Some(Nil)
    case h :: t => h.flatMap(hh => sequence(t) map (hh :: _))
  }

  def main(args: Array[String]): Unit = {
    val l = List(Some(1), Some(2), Some(3), Some(4))
    val l1 = List(Some(1), Some(2), None, Some(4))
    val l2 = Nil
    println(sequence(l))
    println(sequence(l1))
    println(sequence(l2))
  }

}
Some(List(1, 2, 3, 4))
None
Some(List())
时间: 2025-01-11 02:59:14

Option Sequence的相关文章

泛函编程(24)-泛函数据类型-Monad, monadic programming

在上一节我们介绍了Monad.我们知道Monad是一个高度概括的抽象模型.好像创造Monad的目的是为了抽取各种数据类型的共性组件函数汇集成一套组件库从而避免重复编码.这些能对什么是Monad提供一个明确的答案吗?我们先从上节设计的Monad组件库中的一些基本函数来加深一点对Monad的了解: 1 trait Monad[M[_]] extends Functor[M] { 2 def unit[A](a: A): M[A] 3 def flatMap[A,B](ma: M[A])(f: A =

泛函编程(9)-异常处理-Option

Option是一种新的数据类型.形象的来描述:Option就是一种特殊的List,都是把数据放在一个管子里:然后在管子内部对数据进行各种操作.所以Option的数据操作与List很相似.不同的是Option的管子内最多只能存放一个元素,在这个方面Option的数据操作就比List简单的多,因为使用者不必理会数据元素的位置.顺序.Option只有两种状态:包含一个任何类型的元素或者为空.或者这样讲:一个Option实例包含 0 或 1 个元素:None代表为空,Some(x)代表包含一个任意类型的

[转]Installing python 2.7 on centos 6.3. Follow this sequence exactly for centos machine only

Okay for centos 6.4 also On apu.0xdata.loc, after this install was done $ which python /usr/local/bin/python $ python -V Python 2.7.3 $ ls -ltr /usr/local/bin/pyth* lrwxrwxrwx 1 root root 24 Jan 30 2013 /usr/local/bin/python -> /usr/local/bin/python2

Sequence Number

Sequence 在当前transaction scope之外产生,当事务回滚时,Sequence number 不会回滚. 1,Create Sequence syntax CREATE SEQUENCE [schema_name . ] sequence_name [ AS [ built_in_integer_type | user-defined_integer_type ] ] [ START WITH <constant> ] [ INCREMENT BY <constant

UML建模之时序图(Sequence Diagram)

引自:http://www.cnblogs.com/ywqu/archive/2009/12/22/1629426.html UML建模之时序图(Sequence Diagram) 一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) 对象(Object) 生命线(Lifeline) 控制焦点(Focus of Control) 消息(Message) 自关联消息(Self-Message) Combin

模拟ORA-26040: Data block was loaded using the NOLOGGING option

我们知道通过设置nologging选项.能够加快oracle的某些操作的运行速度,这在运行某些维护任务时是非常实用的,可是该选项也非常危急,假设使用不当,就可能导致数据库发生ORA-26040错误. 首先.构造使用环境. SQL> select tablespace_name,logging,force_logging from dba_tablespaces; TABLESPACE_NAME LOGGING FOR ------------------------------ --------

UML建模之时序图(Sequence Diagram)教程

一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) 对象(Object) 生命线(Lifeline) 控制焦点(Focus of Control) 消息(Message) 自关联消息(Self-Message) Combined Fragments 三.时序图实例分析(Sequece Diagram Example Analysis) 时序图场景 时序图实例 时序图实例分析 四.总结(Summary)

In Depth : Android Boot Sequence / Process

What happened when I press power on button in my Android device ? What is Android boot sequence ? What is linux kernel ? What is different between desktop linux kernel and Android linux kernel ? What is bootloader ? What is Zygote ? What is x86 and A

L3 MPLS VPN InterAS Option B: MP-eBGP between ASBRs

Option B的优势在于取消了的VRF相关的配置,减少了很多表项,减轻了ASBR的负载,通过MP-eBGP在ASBR之间交换vpnv4的路由,由于取消了VRF,就需要在ASBRs上关掉route-target的过滤:no bgp default route-target filter . 每改变一次下一跳,标签就会被重新分配. R4和R5之间的标签通过BGP来分配.neighbor 45.1.1.5 send-label,在ASBR互联的接口上自动启用mpls bgp forwarding .