Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

Scheme Programming Language

Counting Values in a List


Hi,

I'm just learning scheme as I've heard it's a good language to get a
grasp of programming. I've written a simple program, and I've got it
returning 4 values where it should return 2.

Basically what it does is compare an "answer list" to a list of
guesses by the user. So if the user gets all 4 values correct, it
returns 1, 1, 1, 1, and if the user gets 2 right, 2 wrong, it returns
1, 1, 0, 0 (or wherever the user guessed incorrectly).

What I want it to do is return eg; (4, 0) instead.

Anyone got any ideas?

mkin@gmail.com writes:
> What I want it to do is return eg; (4, 0) instead.

> Anyone got any ideas?

Can you post your code?

Cheers,
Phil

On Mar 22, 8:23 pm, Phil Jackson <s@place-spam-here.blah> wrote:

> mkin@gmail.com writes:
> > What I want it to do is return eg; (4, 0) instead.

> > Anyone got any ideas?

> Can you post your code?

> Cheers,
> Phil

Well, this is the code that spits out the (1, 1, 1, 1) etc.

(define (user-turn guess-list answer-list

(user-turn

(cond
    ([equal? (first answer-list) (first guess-list)] 1)
    ([equal? (first answer-list) (second guess-list)] 0)
    ([equal? (first answer-list) (third guess-list)] 0)
    ([equal? (first answer-list) (fourth guess-list)] 0)
   )

  (cond
    ([equal? (second answer-list) (first guess-list)] 0)
    ([equal? (second answer-list) (second guess-list)] 1)
    ([equal? (second answer-list) (third guess-list)] 0)
    ([equal? (second answer-list) (fourth guess-list)] 0)
  )

  (cond
    ([equal? (third answer-list) (first guess-list)] 0)
    ([equal? (third answer-list) (second guess-list)] 0)
    ([equal? (third answer-list) (third guess-list)] 1)
    ([equal? (third answer-list) (fourth guess-list)] 0)
  )

  (cond
    ([equal? (fourth answer-list) (first guess-list)] 0)
    ([equal? (fourth answer-list) (second guess-list)] 0)
    ([equal? (fourth answer-list) (third guess-list)] 0)
    ([equal? (fourth answer-list) (fourth guess-list)] 1)
    )
)

On Mar 22, 8:40 pm, mkin@gmail.com wrote:

> On Mar 22, 8:23 pm, Phil Jackson <s@place-spam-here.blah> wrote:

> CODE

Whoops, missing a bracket in there

If I understand correctly, your program returns a list and you want a
different list; e.g. a mapping like this:
(0 0 0 0) => (0 4)
(0 1 0 0) => (1 3)
(0 1 1 0) => (2 2)
(1 0 1 1) => (3 1)

Do you understand apply? apply + gives you the first element of the
result you want.

(let ((lst '(0 1 1 1)))
  (apply + lst))
   => 3

Do you understand map? map lets you transform your original list. You
might want a transformation like:
(0 1 1 1) => (1 0 0 0)

(map (lambda (n) (- 1 n)) '(0 1 1 1))
  => (1 0 0 0)

Now you can get the second element of your desired result:
(let ((lst '(0 1 1 1))
       (flip (lambda (n) (- 1 n))))
  (apply + (map flip lst)))
   => 1

thus,
(define (num_right&wrong lst)
  (let ((flip (lambda (n) (- 1 n))))
   (list
    (apply + lst)
    (apply + (map flip lst))))

(num_right&wrong '(0 1 1 1))
   => (3 1)

demonstrates what you want.

There are many other ways to do it. The "schemish" way is to iterate
through a list using a tail recursive function:

(define (num_right&wrong lst)
   (letrec
    ((sum_them
      (lambda (lst right wrong)
        (cond
         ((null? lst)
          (list right wrong))
         ((zero? (car lst))
          (sum_them (cdr lst) right (+ wrong 1)))
         (else
          (sum_them (cdr lst) (+ right 1) wrong))))))
    (sum_them lst 0 0)))

(num_right&wrong '(0 1 1 1))
  => (3 1)

regards,
Nate T.

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc