Sto cercando di implementare i cons di base, car e cdr di SCHEME in C. Ho creato un semplice programma che mi permette di gestire due interi come mostrato nel programma principale. Tuttavia, desidero che il mio programma sia in grado di utilizzare un oggetto "consed" con una cifra oltre che un "oggetto condiviso" con un altro "oggetto condiviso" come mostrato di seguito:
- (contro 2 3)
- (contro 2 (contro 2 3))
- (cons (contro 2 3) (contro 2 3))
Poiché la limitazione deriva dal fatto che i dati nella struct sono di tipo int, è possibile che una variabile accetti più tipi di dati in C? Se sì, come? In caso contrario, c'è un altro modo per affrontare questo problema? Ecco il mio codice:
#include <stdio.h>
#include <string.h>
typedef struct cons_object {
int data;
struct node* next;
} cons_object;
cons_object* cons(int x, int y )
{
cons_object* car = NULL;
cons_object* cdr = NULL;
car = malloc(sizeof(struct cons_object));
cdr = malloc(sizeof(struct cons_object));
car->data = x;
car->next = cdr;
cdr->data = y;
cdr->next = NULL;
return car; /*returns the pointer car*/
}
int car(cons_object* list) /*takes in a consed object*/
{
cons_object* car = list;
int y;
y = car->data;
return y;
}
int cdr(cons_object* list)
{
cons_object* cdr = list;
cdr = cdr->next;
int z;
z= cdr->data;
return z;
}
int main ()
{
int y = car (cons(33,42));
printf("%d\n",y);
int z = cdr (cons(3,4));
printf("%d\n",z);
return 0;
}