Either Traverse

package either

object Traverse {

  def traverse[E, A, B](as: List[A])(f: A => Either[E, B]): Either[E, List[B]] = as match {
    case Nil    => Right(Nil)
    case h :: t => f(h) flatMap (hh => traverse(t)(f) map (tt => hh :: tt))
  }

  def main(args: Array[String]): Unit = {
    val l1 = List(1, 2, 3)
    val l2 = Nil
    println(traverse(l1)((a: Int) => Right(a + 1)))
    println(traverse(l2)((a: Int) => Right(a + 1)))
  }

}
Right(List(2, 3, 4))
Right(List())
时间: 2024-12-21 10:21:58

Either Traverse的相关文章

List::traverse遍历

声明: // 遍历 void traverse(void (*)(T&)); //遍历,依次实施visit操作(函数指针,只读或局部性修改) template <typename VST> //操作器 void traverse(VST&); //遍历,依次实施visit操作(函数对象,可全局性修改) 定义: template <typename T> void List<T>::traverse(void (*visit)(T&)) //利用函

Option Traverse

package option object Traverse { def traverse[A, B](a: List[A])(f: A => Option[B]): Option[List[B]] = a match { case Nil => Some(Nil) case h :: t => Map2.map2(f(h), traverse(t)(f))(_ :: _) } def main(args: Array[String]): Unit = { val l = List(1,

Vector::traverse遍历

对Vector元素进行遍历,将遍历结果交由传递的函数使用: template <typename T> void Vector<T>::traverse(void (*visit)(T &)) //利用函数指针机制的遍历 { for (int i = 0; i < _size; i++) visit(_elem[i]); } template <typename T> template <typename VST> //元素类型.操作器 voi

Traverse an expression tree and extract parameters

Traverse an expression tree and extract parameters I think as you've said that using ExpressionVisitor works out to be a good approach. You don't need to implement all the Visit... methods as they already have a default implementation. From what I un

001 -- Circle LinkList, list initiate, add a new node, delete a node, and List traverse

#include <studio.h> #include <stdlib.h> typedef struct CLinkList { int data; struct CLinkList *next ; } node; /*initiate a circle list*/ void ds_init(node **pNode) { int item; node *temp; node *target; printf("please input the value of th

【转载】Morris遍历二叉树 &amp; BST(二叉搜索树) Traverse &amp; 空间O(1) 时间O(n)

因为做一道Leetcode的题目(前面博客有:link),需要用Space O(1)空间复杂度来中序遍历树, 看了Discuss,也上网搜了一下,发现空间O(1)可以用 Morris遍历的方法.方法介绍如下: http://www.cnblogs.com/AnnieKim/archive/2013/06/15/MorrisTraversal.html其中,中序遍历和前序遍历比较方便解决: 通常,实现二叉树的前序(preorder).中序(inorder).后序(postorder)遍历有两个常用

Jan 11 - Contains Duplicate II; Array; Traverse; HashMap; HashSet;

代码: public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { //int gap = nums.length; Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < nums.length; i++){ Integer j = map.put(nums[i], i); if(j != nul

Jan 11 - Contains Duplicate; Array; Traverse; Integer;

遍历数组找出有没有重复的元素 首先想到用一个数组记录出现的元素的个数 代码: public class Solution { public boolean containsDuplicate(int[] nums) { if(nums.length == 0) return true; int[] checkElement = new int[Integer.MAX_VALUE]; for(int i = 0; i < nums.length; i++){ if(checkElement[num

node to traverse cannot be null

(1)首先是发现自己的界面返回一个空白的页面,首先怀疑是不是界面的ognl表达式写的不正确,然后查询了ognl表达式 刚开始用的是没有加#引用的方式,也没用var,现在改写加上了,就报了上边的错误,然后把数据库处理部分的hql语句修正,去掉#也依然好使. (2)这个错误实说节点到遍历不能为空,就是说后台数据库没有传值到显示界面上,也就是你的dao层出了错误,所以要到写查询语句的位置找寻错误. 发现自己的from后边没有写空格,就是这个错误的原因.