Example #1
0
File: 2-3.c Project: tsuru0/app
ptr print(ptr p){
    
    if(p==nil){
        printf("()");
        return nil;
    }
    
    switch(p->tag){
        case 0:  //リストのprint
            putchar('(');//先頭の(の印刷
            print_cons(p);//リストの項目を印刷する。
            break;
        case 1:  //int
            printf("%d ",p->data.num);
            break;
        case 2:  //symbol
            printf("%s ",p->data.symbol.name);
            break;
        default:
            printf("Abnormal data! Fatal!\n");
            exit(1);
    }
    
    return nil;
}
Example #2
0
	void Printer::print(LispObjRef obj) {
		if (is_nil(obj))
			output_ << "NIL";
		else if (is_fixnum(obj))
			output_ << get_ctype<FixnumType>(obj); // (CFixnum)(boost::get<FixnumType>(*obj));
		else if (is_floatnum(obj))
			output_ <<  get_ctype<FloatnumType>(obj); //(CFloatnum)(boost::get<FloatnumType>(*obj));
		else if (is_string(obj))
			output_ << "\"" << get_ctype<StringType>(obj) << "\""; // ""(CString)(boost::get<StringType>(*obj)) << "\""; 
		else if (is_symbol(obj))
			output_ << get_ctype<SymbolType>(obj).name; // static_cast<LispSymbol>(boost::get<SymbolType>(*obj)).first;
		else if (is_cons(obj)) {
			output_ << "(";
			print_cons(obj);
			output_ << ")";			
		} else if (is_char(obj)) {
			CChar c = get_ctype<CharType>(obj);
			if (isprint(c)) {
				output_ << c;				
			} else {
				output_ << "#" << std::hex << (int) c << std::dec;
			}
		}
		else
			output_ << "#UNPRINTABLE#";
	}
Example #3
0
void print_table(hash_table* ht)
{
    int i, n = ht->hash_div;
    cons** table = ht->table;

    for (i = 0; i < n; i++) {
        if (table[i] != NULL) {
            print_cons(table[i]);
        }
    }
}
Example #4
0
void print_cons(cons* list)
{
    if (list == NULL) {
        printf("NULL\n");
    } else {
        printf("%s : %d\n", list->str, list->car);
        if (list->cdr != NULL) {
            print_cons(list->cdr);
        }
    }
}
Example #5
0
/* Print consequences of all fired rules */
void print_results(void)
{
	register int i;
	char c;

	_clearscreen(_GCLEARSCREEN);
	for (i = 0; i < RULE_NUM; i++)
		if (get_rb_fire_flag(i))
			print_cons(i);
	printf("\n\t============Press a key to continue===============");
	c = getch();
}
Example #6
0
	void Printer::print_cons(LispObjRef obj) {
		print(car(obj));
		LispObjRef next(cdr(obj));
		if (is_cons(next)) {
			output_ << " ";
			print_cons(next);					
			return;
		}
		if (is_nil(next)) {
			return;
		}
		output_ << " . ";
		print(next);
	}
Example #7
0
File: 2-3.c Project: tsuru0/app
ptr print_cons(ptr p){  //  p is cons
    ptr next;
    
    print(car(p)); //これはprintでないといけない。
    
    next=cdr(p);
    
    if(next==nil)
        putchar(')');
    else if(next->tag==0){ //list が続く
        print_cons(next);
    }
    else{  //非真性リスト
        printf(" . ");
        print(next);
        putchar(')');
    }
    
    return nil;
}