2017-02-21 26 views
-2

Я пытаюсь создать список рекурсивно, введя два значения в качестве параметра, и это возвращает список.Возвращаемые значения списка из двух значений рекурсивно в haskell

Я знаю, что, выполнив следующие действия:

function1 a b = [a..b] 

работает правильно, но не является рекурсивным. Сделать работу рекурсивно, введя один параметр следующим образом:

function 0 = [] 
function a = function4 (a-1) ++ [a] 

Но я действительно понятия не имею, как это сделать, что она создается рекурсивно с двумя параметрами.

ответ

4

Вы проверяете ли a == b вместо сопоставления с образцом:

function a b = if a == b then [b] 
         else a : function (succ a) b 

Обратите внимание, что это может привести к проблемам, если a больше b, чтобы начать с. Лучше проверьте это тоже. И пока мы на нем, дайте вам функцию лучшего имени:

range :: (Ord a, Enum a) => a -> a -> [a] 
range a b 
    | a > b  = [] 
    | a == b = [b] 
    | otherwise = a : range (succ a) b 
+0

Я работал правильно. Спасибо! –

Смежные вопросы