Teen Programmers Unite  
 

 

Return to forum top

for unknown_lamer or anyone who knows scheme

Posted by kfatima [send private reply] at November 25, 2002, 11:10:42 PM

hi,
hope i am not bothering you too much. i am having trouble with one of the functions in scheme .
the structure is like: it is supposed to take a list containing 4 different hashfunctions and apply each one to the words that are within the list. so
hashfunctions are in the list like: (hash1 hash2 hash3)
and words are in the list like (hello day)
hash1, 2 & 3 are already defined. so the result should be
like (78 45 76 32 98 32) since hash1,2 & 3 apply to hello first and then day so altogether 6 numbers generated by the hashfunction.
i already have a function that generates a list containing numbers by apply hashfunctions to only one word:
(define applyall (lambda (functionlist value)
(if(null? functionlist) '()
(cons ((car functionlist) value) (applyall (cdr functionlist) value))))) // works fine!

but i dont know how to apply it to the whole list of words containing more than one word, i assme i can use he applyall
function but how?
this is how i started it:
(define bitvect (lambda (function w)
(cond(null? w) '()
(null? function) '()
(append ((applyall function w)) (bitvect (cdr function) (cdr w))))))//but it just gives the list of words back!

any kind of advice would be helpful
i would really appreciate it
thanks a lot
fatima

Posted by unknown_lamer [send private reply] at November 26, 2002, 10:19:16 AM

In your cond, you are missing some parens. (cond (null ? w) ...) will test if null? is true, and it is, so w is returned.

(cond ((null? w) '())
      ((null? function) '())
      (else ...))


etc., just make sure the use the right number of parens.
Posted by kfatima [send private reply] at November 26, 2002, 12:03:39 PM

hi,
thanks for the reply i fixed the parenthesis now, but i dont seem to get the right output, can you tell me how to get the list of numbers generated by the hash functions as i mentioned in my last post
thanks

Posted by unknown_lamer [send private reply] at November 27, 2002, 11:09:52 PM

You should put the append into the else of the cond. Your recursion is non-tail so you may want to rewrite your code using named-let and also cons together your list backwards and then use reverse! from srfi-1 to reverse it for efficiency. But you probably don't care about that.

You must be logged in to post messages and see which you have already read.

Log on
Username:
Password:
Save for later automatic logon

Register as a new user
 
Copyright TPU 2002. See the Credits and About TPU for more information.