2016-04-10 2 views
0

Например, у меня есть таблица tab = [(1,11), (2,22), (3,33)] и две функции. Первый будет принимать в качестве параметра таблицу и целое число и заменит целое число на значение из таблицы. Предположим, что Integer будет на столе.Можно ли написать любую функцию без явных параметров в Haskell?

replace :: [(Int, Int)] -> Int -> Int 
replace t i = snd $ head [x | x <- t, fst x == i] 

Вторая функция заменит все вхождения 1, 2, 3 из списка со значениями из таблицы.

replaceAll :: [(Int, Int)] -> [Int] -> [Int] 

Сначала я получил:

replaceAll = \tab lst -> foldl(\acc x -> acC++ [replace tab x]) [] lst 

тогда

replaceAll = \tab -> foldl(\acc x -> acC++ [replace tab x]) [] 

Есть ли способ, чтобы написать это без лямбда-функции? РЕДАКТИРОВАНИЕ: Не нужно использовать функцию сгиба.

+4

Вы действительно не хотите [pointfree version этого кода] (http://pointfree.io/): 'replaceAll = flip foldl ([]). flip ((.). (++)). flip flip ([]). ((:).). replace' – Zeta

ответ

2

Это работает для меня

replaceAll = map . replace 

Хотя я также как и удаление Params, я думаю, что это немного легче понять, если вы заполняете им Params для этого определения ....

replaceAll index vals = map (replace index) vals 
Смежные вопросы