[erlang-questions] The reason for "no case clause matching" error?
Fredrik Svahn
fredrik.svahn@REDACTED
Tue Jan 1 17:28:38 CET 2008
Hi,
I cannot say I fully understand the error message. However the reference
manual says:
"List comprehensions are written with the following syntax:
[Expr || Qualifier1,...,QualifierN]
Expr is an arbitrary expression, and each Qualifier is either a generator or
a filter.
- A *generator* is written as:
Pattern <- ListExpr.
ListExpr must be an expression which evaluates to a list of terms.
- A *filter* is an expression which evaluates to true or false."
Some of the Qualifiers you use in your list comprehension (e.g. Lhs =
lists:sublist(Lst, 1, N)) are neither generators nor filters since they do
not contain "<-" and evaluates to lists rather than true or false.
I suggest rewriting the last function clause to:
ppar(Lst) ->
[SP ||
N <- lists:seq(1,length(Lst)),
SP <- sp(lists:sublist(Lst, 1, N), lists:sublist(Lst, N+1,
length(Lst)))].
or (to maintain the variables for clarity)
ppar(Lst) ->
[SP || N <- lists:seq(1,length(Lst)),
SP <- begin
Lhs = lists:sublist(Lst, 1, N),
Rhs = lists:sublist(Lst, N+1, length(Lst)),
sp(Lhs, Rhs)
end].
Gives:
2> test4:ppar([2,2,3]).
[[[2],[2],[3]],[[2],[2,3]],[[2,2],[3]],[[2,2,3]]]
Hope this helps.
BR /Fredrik
On Jan 1, 2008 1:08 PM, Yoel Jacobsen <yoel@REDACTED> wrote:
> Hello,
>
>
> I want to implement some sort of list partitioning in Erlang.
>
>
> The ppar function should work like that:
>
> ppar [2,2,3] -> [[[2],[2],[3]], [[2],[2,3]], [[2,2],[3]],[ [2,2,3]]]
> ppar [2,2,3,4] -> [[[2],[2],[3],[4]], [[2],[2],[3,4]], [[2],[2,3],[4]],
> [[2],[2,3,4]], [[2,2],[3],[4]], [[2,2],[3,4]], [[2,2,3],[4]], [[2,2,3,4]]]
>
>
> This is the code I have written:
>
> -module(ppar).
> -export([ppar/1]).
>
>
> sp(Lhs, []) ->
> [[Lhs]];
> sp(Lhs, Rhs) ->
> [lists:append([Lhs], P) || P <- ppar(Rhs)].
>
> ppar([]) ->
> [[[]]];
> ppar([H|[]]) ->
> [[[H]]];
> ppar(Lst) ->
> [SP ||
> N <- lists:seq(1,length(Lst)),
> Lhs = lists:sublist(Lst, 1, N),
> Rhs = lists:sublist(Lst, N+1, length(Lst)),
> SP <- sp(Lhs, Rhs)].
>
> Yet, when I try it I get an error:
>
> 1> ppar:ppar([1,2,3]).
> ** exception error: no case clause matching [1]
> in function ppar:'-ppar/1-lc$^0/1-0-'/2
>
> Why is that?
>
> Yoel
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20080101/8d365c1f/attachment.htm>
More information about the erlang-questions
mailing list