小编ame*_*mus的帖子

Function as an Instance of Monad

I am having difficulty understanding how a function can be a monad.

Function (->) r is a monad according to a declaration in Control.Monad.Instances:

instance Monad ((->) r) where  
    return x = \_ -> x  
    h >>= f = \w -> f (h w) w  
Run Code Online (Sandbox Code Playgroud)

Even what Miran Lipovača says about it makes me confused:

The implementation for >>= seems a bit cryptic, but it's really not all that. When we use >>= to feed a monadic value to …

monads haskell

8
推荐指数
2
解决办法
414
查看次数

SQL用户定义函数的参数数量无限多?

在Oracle和MySQL中,如何创建一个带有无限数量参数的函数,以便可以像GREATEST(value1,value2,...)一样调用它?

通过某个标准比较两个值非常简单,但将"更大"的值传递给另一个比较是我似乎没有在SQL中工作.

谢谢!

编辑(在Mike的评论之后):我正在寻找比较多列的解决方案.具体而言,我的问题是如何将GREATEST()实现为UDF.以下代码比较了三列.

SELECT CASE WHEN CASE WHEN col_1 < col_2 THEN col_2
                 ELSE col_1 END < col_3 THEN col_3
       ELSE CASE WHEN col_1 < col_2 THEN col_2
                 ELSE col_1 END END AS greatest
  FROM figures;
Run Code Online (Sandbox Code Playgroud)

显然,这不是很好.拥有一个将相同的比较方法一遍又一遍地应用于值列表的通用函数会更有用.

通过SQL我的意思是任何SQL数据库产品,但我更喜欢在Oracle或MySQL中运行的解决方案

mysql sql oracle user-defined-functions

6
推荐指数
1
解决办法
909
查看次数

GROUP BY 子句的别名?

在 MySQL 中,可以在 SELECT 子句中创建的 GROUP BY 子句中使用别名(参见MySQL 参考)。

我只是想知道为什么不能在 GROUP BY 中创建别名并在 SELECT 中使用它,它遵循 SELECT 语句的执行顺序。

换句话说,为什么以下不合语法?

SELECT region, SUM(population)
  FROM population_us_states
 GROUP BY
       CASE state_name
               WHEN 'CT' THEN 'New England'
               WHEN 'RI' THEN 'New England'
               WHEN 'MA' THEN 'New England'
               WHEN 'ME' THEN 'New England'
               WHEN 'NH' THEN 'New England'
               WHEN 'VT' THEN 'New England'
               WHEN 'CA' THEN 'West Coast'
               WHEN 'OR' THEN 'West Coast'
               WHEN 'WA' THEN 'West Coast'
        ELSE 'other' END AS region;
Run Code Online (Sandbox Code Playgroud)

mysql sql

6
推荐指数
1
解决办法
8479
查看次数

Haskell:列表创建的评估列表元素

我正在尝试编写一个列表函数,它采用一个简单的列表并反馈一个列表列表,所有后者的元素与前一个元素具有相同的关系.

更具体地说,函数应该这样做:

  1. 列出清单; let xs = [1,2,3,4,5,6,8,9,10]
  2. 从头部看两个元素,如果第二个元素等于第一个加一个(即xs!!0 = xs!!1 - 1),则在它们之间创建一个列表中的列表.
  3. 该列表采用元素,而最后一个元素与从主列表新近馈送的元素具有相同的关系.当中断时,子列表关闭,但该功能应该根据相同的条件制作新的子列表.
  4. 因此,最终结果应该是,[[1,2,3,4,5,6],[8,9,10]] 缺席7将主要列表分为两个子列表.它们都是算术进展,常见差异为1.

在第7章阅读了" 了解你的大好事"之后,我认为自己确实有了一个好主意,并且尝试过并且不光彩地失败了.欢迎帮助,拜托!

ghci> filter (\x y -> x + 1 == y) xs

"<"interactive">":1:8:
    The lambda expression `\ x y -> x + 1 == y' has two arguments, 
    but its type `a -> Bool' has only one 
    In the first argument of `filter', namely `(\ x y -> x + 1 == y)' 
    In the expression: filter (\ x y …
Run Code Online (Sandbox Code Playgroud)

haskell list

2
推荐指数
1
解决办法
463
查看次数

标签 统计

haskell ×2

mysql ×2

sql ×2

list ×1

monads ×1

oracle ×1

user-defined-functions ×1