[erlang-questions] why is the the output not a list

Roelof Wobben <>
Sat Sep 26 17:47:22 CEST 2015


Op 26-9-2015 om 15:36 schreef Stefan Schmiedl:
> Roelof Wobben (26.09. 14:44):
>
>> Hello,
>>
>> I tried to make a number parser which can parse numbers above the 10.
>>
>> So I change my code to this :
>>
>> -module(number_parser).
>>
>> -export([scan/1]).
>>
>> scan(String) ->
>>       scan(String, []).
>>
>> scan([], List) ->
>>       List;
>>
>> scan([Head | Rest], List_parse) when Head >= $0, Head =< $9 ->
>>        digits(Head, Rest, List_parse);
>>
>> scan( [$+ | Rest], List_parse) ->
>>      scan(Rest, [$+ | List_parse] );
>>
>> scan([32 | Rest], List_parse) ->
>>       scan(Rest, List_parse).
>>
>>
>> digits(Number, [Head | Rest] , List_parse ) when Rest >= $0 , Head =< 10 ->
>                                                     ^^^^ Head
>
> conditions after a "when" fail silently, so you're never going into
> this function
>
> s.
>
>>       digits(Number + Head, Rest, List_parse);
>>
>> digits(Number, String , List_parse ) ->
>>       scan(String, [Number | List_parse]).
>>
>> But when I do number_parser:scan("1 + 1") I see this as output "1+1"
>> where I was expecting to see [ [1] . [+],[1]]
>> Where did my thinking took the wrong path.
>>
>> Roelof
>>
>> _______________________________________________
>> erlang-questions mailing list
>> 
>> http://erlang.org/mailman/listinfo/erlang-questions
>
> -----
> Geen virus gevonden in dit bericht.
> Gecontroleerd door AVG - www.avg.com
> Versie: 2015.0.6140 / Virusdatabase: 4419/10702 - datum van uitgifte: 09/26/15
>
Thanks ,

Still something is not working as expected and I do not see what it is,

I have this code now :

-module(number_parser).

-export([scan/1]).

scan(String) ->
     scan(String, []).

scan([], List) ->
     List;

scan([Head | Rest], List_parse) when Head >= $0, Head =< $9 ->
      digits(Head, Rest, List_parse);

scan( [$+ | Rest], List_parse) ->
    scan(Rest, [$+ | List_parse] );

scan([32 | Rest], List_parse) ->
     scan(Rest, List_parse).


digits(Number, [Head | Rest] , List_parse ) when Head >= $0 , Head =< $9 ->
    io:format("Number: ~w", [Number]),
    io:format("Head: ~w", [Head] ),
    New_number = (Number - 48) * 10 + Head - 48,
    digits(New_number, Rest, List_parse);

digits(Number, String , List_parse ) ->
    io:format("Number: ~w ~n",  [Number - 48]),
    io:format("String: ~s ~n", [String]),
    io:format("List_parse: ~s ~n", [List_parse]),
    scan(String, [Number | List_parse]).

When I do number_parser("1+1") I see this output:

Number: 1
String: + 1
List_parse:

Number: 1
String:
List_parse: +1

So still no list and the first 1 disappear.

When I do number_parser:scan("10+1") I see this output :

Number: 49
Head: 48
Number: -38
String: + 1
List_parse:

Number: 1
String:
List_parse: +

So all numbers has disapear.

Roelof



More information about the erlang-questions mailing list