performance - Efficiency issue on Guile SCHEME: member and equal? -



performance - Efficiency issue on Guile SCHEME: member and equal? -

i new on scheme programming , after while succeeded on writing couple of scripts deal long maths formulas.

the issue execution pretty slow. after profiling realized execution takes 35% of time executing built-in functions equal? , member.

my question regarding whether there exist more efficient version of functions or should re-factor code in order remove calls?

i'm re-write code appreciate piece of advice.

thanks!

edit 1:

i add together code making question clearer. next function takes 2 parameters, pair (x,y) , term, x , y variable names(symbols), may symbol , number, list , symbol, etc. term list such

(+ w y z (* (- 1) x))

so after function execution

(+ w z)

the code looks following:

(define (simp-by-term_eq t_cc t) (cond ((and (member (list '* (list '- 1) (car t_cc)) (cdr t)) (member (cadr t_cc) (cdr t))) (delete-1st (cadr t_cc) (delete-1st (list '* (list '- 1) (car t_cc)) (cdr t))) ) ((and (member (list '* (car t_cc) (list '- 1)) (cdr t)) (member (cadr t_cc) (cdr t))) (delete-1st (cadr t_cc) (delete-1st (list '* (car t_cc) (list '- 1)) (cdr t))) ) (else t) ) )

there several conditions previous 1 on function.

the equal function calls used filter callse such as

(filter (lambda (x) (and (not (equal? (list '* (car t_cc) (list '- 1)) x)) (not (equal? (list '* (list '- 1) (car t_cc)) x)))) t)

equal? needs test every part of list construction traverses both operands until has touched sequences , compared atomic values. if need test if it's same can utilize eq? checks pair has same address. evaluate #f when list construction same. that's ok. eqv? similar eq? works numbers , characters (but not strings).

you can utilize memq uses eq? instead of equal? , can utilize memqv uses eqv? works numbers , characters. i'm not familiar guile if have performance issues , using member perhaps should consider hash tables instead?

it happen need rethink algorithm utilize if need utilize equal?, without specific code it's hard more specific.

performance functional-programming scheme equality

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -