KX Community

Find answers, ask questions, and connect with our KX Community around the world.
KX Community Guidelines

Home Forums kdb+ Is this similar to function alias? Re: Is this similar to function alias?

  • rocuinneagain

    Member
    November 13, 2021 at 12:00 am

    Yes defining upd in this way means it behaves the same as insert (mostly)

     

    q)upd:insert 
    q)tab:([] a:1 2) 
    q)insert[`tab;enlist 3] 
    ,2 
    q)tab 
    a 
    - 
    1 
    2 
    3 
    
    q)upd[`tab;enlist 4] 
    ,3 
    q)tab 
    a 
    - 
    1 
    2 
    3 
    4

     

    But there are differences. ‘insert’ is a built in operator which cannot be passed as the first item by reference over a handle.

    (This is causing the issue you are seeing)

     

    q)value(`upd;`tab;enlist 5) //Pass by reference succeeds for user defined function 
    ,4 
    q)value(`insert;`tab;enlist 6) //Pass by reference fails for operator 
    
    'insert 
    [0] value(`insert;`tab;enlist 5) ^ 
    
    q)value("insert";`tab;enlist 6) //Pass as parse string succeeds 
    ,5 
    
    q)value(insert;`tab;enlist 6) //Pass by value succeeds 
    ,6

     

    User defined functions can only use prefix notation whereas operators can be used prefix or infix.

     

    q)`tab insert enlist 7 //Infix with operator succeeds 
    ,7 
    q)`tab upd enlist 8 //Infix with user defined function fails 
    'type 
    [0] `tab upd enlist 8 ^ 
    q)insert[`tab;enlist 8] //Prefix with operator succeeds 
    ,8 
    q)upd[`tab;enlist 9] //Prefix with user defined function succeeds 
    ,9