[erlang-questions] how to create user-defined guards

Ivan Carmenates Garcia <>
Mon Apr 27 01:12:54 CEST 2009


Hi all,

I have a problem if for example I have an mnesia cosult like this 

get_students()->
        F = fun()->
                mnesia:select(person_table, [{#person_table{
                        id          ='$1',
                        name     ='$2',
                        group    ='$3',
                        type      ='$4',
                        id_card ='$5',
                        user      ='$6'},
                        [{'=:=', {is_student,'$4'}, true}],
                        ['$_']}])
        end,
        mnesia:transaction(F).

is_student(X)->
        if X == "Estudiante"->
                true;
        true->
                false
        end.

that's only accept guards, for exaple changing  [{'=:=', {is_student,'$4'}, true}], by  [{'=:=', {is_list,'$4'}, true}], then that work fine

because is_list is a guard, but I need to check for more complex criterias, but using my own funtion criteria I just got

{aborted,{badarg,[person_table,
                  [{{person_table,'$1','$2','$3','$4','$5','$6'},
                    [{'=:=',{is_student,'$4'},true}],
                    ['$5']}]]}}

because is_student is not valid guard.

How can I simulate or make my own guard or do something else to resolve this problem.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 5770 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090426/5ecd1644/attachment.bin>


More information about the erlang-questions mailing list