相关疑难解决方法(0)

如何压缩不同长度的列表?

我怎么能zip两个像

["Line1","Line2","Line3"]
["Line4","Line5"]
Run Code Online (Sandbox Code Playgroud)

不丢弃第一个列表中的休息元素?

如果可以的话,我想用空列表压缩额外的元素.

haskell

11
推荐指数
2
解决办法
4337
查看次数

为什么列表Applicative实例不执行一对一应用程序?

我正在ApplicativeHaskell的Haskell编程中阅读Haskell.为了更好地理解它,我想出了以下Applicative列表定义:

-- Named as pure' and "app" to avoid confusion with builtin versions 
class Applicative' f where
 pure' :: a -> f a
 app :: f (a->b) -> f a -> f b

instance Applicative' [] where
 pure' x = [x]
 app _ [] = []
 app [g] (x:xs) = [(g x)] ++ app [g] xs
 app (g:gs) (x:xs) = [(g x)] ++ app gs xs

-- fmap functions could be defined as:
fmap1' :: (Applicative' …
Run Code Online (Sandbox Code Playgroud)

haskell applicative

3
推荐指数
2
解决办法
385
查看次数

在Haskell中使用zipWith3的sum3

我正在尝试编写一个Haskell函数,它将获取三个列表并返回其元素总和的列表.目前我正在尝试使用zipWith3:

sum3 :: Num a => [a] -> [a] -> [a] -> [a]
sum3 xs ys zs  = zipWith3 (\x y z -> x+y+z) xs ys zs 
Run Code Online (Sandbox Code Playgroud)

问题是它只适用于相同长度的列表.但我希望sum3使用不等长的列表,以便这样做

sum3 [1,2,3] [4,5] [6]
Run Code Online (Sandbox Code Playgroud)

会回来的

[11,7,3]
Run Code Online (Sandbox Code Playgroud)

我认为我应该重新定义zipWith3来处理不等长的列表,但是无法弄清楚如何做(我怀疑我必须用尽所有空列表的可能性).有解决方案吗?

haskell

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

映射功能应用于列表的特定元素

我有一个功能:

mapAtOriginal :: (a -> a) -> [Int] -> [a] -> [a]
mapAtOriginal f is xs = helper 0 is xs
  where
    helper _ [] xs = xs
    helper c (i:is) (x:xs)
      | c < i     =   x : helper (c+1) (i:is) xs
      | otherwise = f x : helper (c+1)    is  xs
Run Code Online (Sandbox Code Playgroud)

它是这样的:

mapAtOriginal (*2) [0,3] [1,2,3,4]   -- == [2,2,3,8]
Run Code Online (Sandbox Code Playgroud)

因此,我想使用map功能重写它。我知道这map适用于列表的每个元素,但是,我只需要将其应用于特定的索引。

我该怎么做?

recursion haskell function map-function

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

标签 统计

haskell ×4

applicative ×1

function ×1

map-function ×1

recursion ×1