chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] Recursive Types?


From: Martin Schneeweis
Subject: [Chicken-users] Recursive Types?
Date: Fri, 22 Jun 2018 14:08:22 +0200

Hi,

is it possible to define recursive types?

Suppose I have a function

  (define my-fun (lambda (lst) ...))

and I want to make sure that every odd element is a symbol and every
even element is a string.

The best I could come up with is something like that:

  (define-type l-1 (pair symbol (pair string null)))
  (define-type l-2 (pair symbol (pair string l-1)))
  (define-type l-3 (pair symbol (pair string l-2)))
  ...
  (define-type l (or ... l-3 l-2 l-1))

  (: my-fun (l --> ...))
  (define my-fun (lambda (lst) ...))

Another question: How could I define something like a "sequence"?

Suppose I don't want to pass the parameters in a list but rather do
something like this:

  (define my-fun (lambda (sym-1 str-1 . rest) ...))

How could I define the type for "rest"?

If I change my definition for "l" (from above) to

  (define-type l (or ... l-3 l-2 l-1 null))

I am almost there - except that the compiler expects me to pass the
"rest" actually as a list - but I want to do:

  (print (my-fun 'a "a" 'b "b" ...))

Martin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]