【问题标题】:haskell, function compositionhaskell,函数组合
【发布时间】:2016-04-30 21:16:49
【问题描述】:

我需要一些帮助来解决 Haskell 中的函数组合任务。我需要编写一个函数,给定一个整数n 和一个内部元素列表,返回每个内部列表中的n-th 元素列表。所以它会像: select 2 [[2,3,4],[5,6],[9,9,9]] = [3,6,9]。问题是,我需要使用函数组合来编写它,所以它应该看起来像 select = ...。换句话说,我想让这个无意义

目前,我有以下几点:

select::Int->[[Int]]->[Int]
select a = map $ head. reverse. take a 

我坚持下去,我不知道如何从第一个也是唯一的子句中删除那些a。有人可以帮我吗?:)

【问题讨论】:

  • 不确定我是否理解这个问题。您必须将整数 n(猜猜这是您的代码中的 a 吗?)给组合函数之一。
  • 这就是现在所做的,我需要从定义中删除a
  • 如果你正在学习,不要试图写一个无点函数。编写一个带参数的普通函数,让它工作,然后将其转换为无点样式。
  • 旁注:您给出示例:select 2 [[2,3,4],[5,6],[9,9,9]] = [3,6,9],这意味着列表的第一个元素位于索引 1。这在 Haskell(和大多数编程语言)中是非标准的——通常是列表从 0 开始索引。对我来说,这将是预期的行为:select 1 [[2,3,4],[5,6],[9,9,9]] = [3,6,9]

标签: function haskell composition


【解决方案1】:

根据您目前的情况,您可以使用select = map . ((head . reverse) .) . take,也可以将其简化为select = map . (last .) . take。另一种方法是使用select = map . flip (!!) . subtract 1

您可以使用pointfree 包自动派生无点版本的函数。

一般来说,我建议不要这样做。具有多个参数的函数在以无点样式定义时会变得相当模糊。

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多