将Haskel中的所有函数参数作为列表获取

wawa

haskell中是否有一种方法可以将所有函数参数作为列表获取。

假设我们有以下程序,我们要在其中将两个较小的数字相加,然后减去最大的数字。假设我们无法更改的功能定义foo :: Int -> Int -> Int -> Int除了构造新列表并将所有参数添加为所述列表的元素之外,是否有办法将所有函数参数作为列表获取?更重要的是,是否有一种独立于参数数目的通用方法?

例:

module Foo where
    import Data.List

    foo :: Int -> Int -> Int -> Int
    foo a b c = result!!0 + result!!1 - result!!2 where result = sort ([a, b, c])
到处走走

有没有一种独立于参数数目的通用方法?

并不是的; 至少这是不值得的。首先,整个想法不是很有用,因为列表是同质的:所有元素必须具有相同的类型,因此它仅适用于仅采用单一类型参数的函数的非常特殊的特殊情况。

即使那样,问题还是在于,“数量的参数”在Haskell中并不是一个明智的概念,因为正如Willem Van Onsem所评论的那样,所有函数实际上仅具有一个参数(更多的参数实际上仅提供给第一个应用程序结果,它又具有函数类型)。

也就是说,至少对于单个参数和最终结果类型而言,将任意数量的参数打包到列表中非常容易:

{-# LANGUAGE FlexibleInstances         #-}

class UsingList f where
  usingList :: ([Int] -> Int) -> f

instance UsingList Int where
  usingList f = f []

instance UsingList r => UsingList (Int -> r) where
  usingList f a = usingList (f . (a:))

foo :: Int -> Int -> Int -> Int
foo = usingList $ (\[α,β,γ] -> α + β - γ) . sort

也可以使用类型族或多参数类型类使此方法适用于任何类型的参数。然而,不是那么简单的就是用可变类型的最终结果一劳永逸地编写它。原因是,这还必须将函数作为最终结果的类型来处理但是,这也可以解释为“我们仍然需要在列表中添加一个参数”!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取所有参数作为列表

是否可以将函数的所有参数作为该函数内的单个对象获取?

将函数应用于所有参数组合(作为列表输出)

从函数中获取所有参数

如何优雅地将类的所有属性作为函数中的参数传递?

将函数列表(带有参数)作为python中的输入

根据mongo db中的字段分组将所有记录作为列表获取

如何在Magento 2中将所有时区列表作为数组获取

将多参数函数应用于 R 中列表中的所有数据框

将列表作为普通参数传递给python中的函数

如何将函数映射到所有参数值上,作为列表?但在函数定义中有明确的参数名称

接受所有类型作为函数中的参数

如何获取/获取函数的所有参数?

我如何将数组作为args列表传递给C中具有可变数量参数的函数

获取作为编译器参数传递的所有宏的列表的最佳方法是什么?

元组列表作为Haskell中的函数参数

如何从 Flask 的下拉列表中获取日期并将其作为函数中的参数传递?

在Scala中,如何传递带有多个参数列表作为参数的函数?

如何获取所有配置参数的列表?

C ++ 11-将引用作为所有权的构造函数参数传递

如何将数组(未知长度)的所有元素作为单独的参数传递给函数?

将动态参数添加到具有参数的函数中,该参数作为参数传递给当前函数

如何获取作为参数传递给python中的函数的列表名称

使用Castle Windsor将具有不同实现的列表的对象作为构造函数参数进行解析

将函数作为类中的参数传递

将枚举作为函数中的参数传递

将结构作为函数中的参数传递

将Map作为参数传递给函数,并获取带有Erlang中值的键

Swift-将Nil作为带有可选参数的泛型函数中的参数