2015-01-06 2 views
-1

Я получаю синтаксическую ошибку после того, как я изменил это:ошибки (Haskell) Анализировать в шаблоне после Карринга

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

h ([],k,x) =[[]] 

h(y:[],k,x) = [x++k:[y]] 

h(y:xs,k,x)= [x++k:y:xs]++h(xs,k,x++[y]) 

к этому: в строке 3

h :: [Int]->Int->[Int]->[[Int]] 

h [] k x =[[]] 

h (y:[]) k x = [x++k:[y]] 

h y:xs k x = [x++k:y:xs]++h(xs,k,x++[y]) 
+1

h (y: []) k x = [x ++ k: [y]] здесь интерпретатор говорит NO – SambaBoy

+0

Эй, можете ли вы немного исправить свой код? Трудно понять, что там происходит. – utdemir

ответ

3

Есть две проблем с этой линией :

h y:xs k x = [x++k:y:xs]++h(xs,k,x++[y]) 
    ^^^^     ^^^^^^^^^^^^^ 
    (1)      (2) 
  1. Вы должны скобки вокруг этой модели - (y:xs)
  2. В отличие от других языков, таких как C, Java, C# и т. Д., В Haskell вы не используете запятые для разделения параметров на функции.
+0

Исправьте меня, если я ошибаюсь, пожалуйста. Я хотел бы добавить, что в выражении «h (y: []) kx',' (y: []) 'предполагается, что он является кортежем' ([Int], Int, [Int]) 'посредством объявления из 'h'. В 'h y: xs k x' тогда' y' должен быть таким кортежем. – TobiMcNamobi