Hello all,

I had to write a program that would take a list and check for alternate atoms and list, if there were two atoms in a row, it would #f, same for two lists. I now need to make it #f for 3 in a row. This is what I did for the first ass.

#lang scheme
(define a (list 1 (list 2 3) 1  (list 2 3) 4)) ;one list
(define b (list (list 2 3) (list 2 3) 4)) ;one list
(define c (list 1 (list 2 3) 1 (list 2 3) 4)) ;one list
(define d (list 1 1 (list 2 3) 1 (list 2 3) 4)) ;one list
(define e (list 1)) ;one list


(define (altlis lis1)         
          
(if (list? (car lis1)) 
    (if (list? (car(cdr lis1))) 
        (quote(false)) 
        (altlis (cdr lis1)
                )
        ) 
    (if (null? (cdr lis1)) (quote(true))
        (if (list? (car(cdr lis1))) 
            (altlis (cdr lis1)) 
            (quote(false)))
        )
    )     
  
)

(altlis e)

I cannot figure this out to catch the third one, any help will be appreciate it as I have NO experience with scheme prior to this class I am taking.

Thanks

Recommended Answers

All 7 Replies

First, make your life easier by making a function

(define (name x)
  (cond ((pair? x) 'pair)
        ((symbol? x) 'symbol)
        (else (error "i don't know how to handle this case"))))

Once you have this, make a recursive function that takes three arguments: a symbol (whose value is 'pair or 'symbol), an integer saying how many times that kind of thing occurred before the start of the current list, and a list of stuff.

Rashakil,

Thank you. I did think about that even for the first program, however for some reason I think he only wants a list passed as a parameter. Your suggestion takes a lot of the complication away so I will try to implement and discuss with the professor.

I have modified the code above to what I need, since everything is a list essentially I will always pass just the car of whatever is next - It seems to be working with a couple of examples, now I will work on the main recursive function:

(define (name x)
  (cond ((not(pair? x)) 'atom)
        ((list? x) 'list)
        (else (error "i don't know how to handle this case"))))

Wanted to let you know that it looks like I completed it. Thank you!

It's a good thing, because I'm banned and wasn't going to give any further help.

Wow, why? you were great help... Anyway.. i read his requirements, he wanted one parameter function... So I did another function passed it the list and made that call my function with 3 paramaters lol :)

Oh, it was because Ken Hess made some racist comments on his blog and Rashakil (me) called him out on it.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.