簡體   English   中英

Haskell函數,可替代地應用輸入一元函數

[英]Haskell function that alternatively applies input unary functions

我正在嘗試編寫一個具有兩個一元函數(f和g)和一個數字列表(ns)的Haskell函數,或者將那些輸入函數f和g應用於輸入列表的元素。

例如:

func double square [2, 3, 4, 5, 6]

會回來

[4, 9, 8, 25, 12]

我正在為我的編譯器使用WinGHCi。 在編寫此功能的任何幫助將不勝感激,謝謝。

如果您不想使用任何庫函數,可以通過使用遞歸來做到這一點:

func _ _ []     = []
func f g (x:xs) = f x : func g f xs

擴展@luqui的評論:

func f1 f2 l = zipWith ($) (cycle [f1, f2]) l

如果您不想使用庫函數,只需查找它們的實現即可,它們非常簡單。

只是一個簡單的解決方案...

fun :: (a -> b) -> (a -> b) -> [a] -> [b]
fun f g = reverse . snd . foldl step (0,[])
          where
             step (c,ac) x = (c + 1, (if even c then f x else g x) : ac)

由於您不想使用庫函數,因此無需使用foldl即可重現相同的結果。 這個想法很容易使用計數器來知道哪個位置是偶數。

編輯:我對我的蓄能器有些困惑。 現在,這是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM