powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный С++
13 сообщений из 38, страница 2 из 2
Тяпничный С++
    #39020870
Factorize
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Не понял, почему Сишник пишет на С++ этот Лисп , а не на Си? :)
...
Рейтинг: 0 / 0
Тяпничный С++
    #39021996
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
меня не миновало когда был дельфином((((
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1168
нынче и перечитывать не хочу(((( 10 лет прошло. чего только не было.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39022004
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov,

О! Спасибо за поддержку.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39022300
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(в печальном настроении)
однажды пытался вникнуть. Увы. Даже навставлял строчек и немного коментов..... и блин - оно даже чегой-то считало.

Вот это я понимаю, сишник писал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
typedef char C;typedef long I;
typedef struct a{I t,r,d[3],p[2];}*A;
#define P printf
#define R return
#define V1(f) A f(w)A w;
#define V2(f) A f(a,w)A a,w;
#define DO(n,x) {I i=0,_n=(n);for(;i<_n;++i){x;}}
I *ma(n){R(I*)malloc(n*4);}mv(d,s,n)I *d,*s;{DO(n,d[i]=s[i]);}
tr(r,d)I *d;{I z=1;DO(r,z=z*d[i]);R z;}
A ga(t,r,d)I *d;{A z=(A)ma(5+tr(r,d));z->t=t,z->r=r,mv(z->d,d,r);
 R z;}
V1(iota){I n=*w->p;A z=ga(0,1,&n);DO(n,z->p[i]=i);R z;}
V2(plus){I r=w->r,*d=w->d,n=tr(r,d);A z=ga(0,r,d);
 DO(n,z->p[i]=a->p[i]+w->p[i]);R z;}
V2(from){I r=w->r-1,*d=w->d+1,n=tr(r,d);
 A z=ga(w->t,r,d);mv(z->p,w->p+(n**a->p),n);R z;}
V1(box){A z=ga(1,0,0);*z->p=(I)w;R z;}
V2(cat){I an=tr(a->r,a->d),wn=tr(w->r,w->d),n=an+wn;
 A z=ga(w->t,1,&n);mv(z->p,a->p,an);mv(z->p+an,w->p,wn);R z;}
V2(find){}
V2(rsh){I r=a->r?*a->d:1,n=tr(r,a->p),wn=tr(w->r,w->d);
 A z=ga(w->t,r,a->p);mv(z->p,w->p,wn=n>wn?wn:n);
 if(n-=wn)mv(z->p+wn,z->p,n);R z;}
V1(sha){A z=ga(0,1,&w->r);mv(z->p,w->d,w->r);R z;}
V1(id){R w;}V1(size){A z=ga(0,0,0);*z->p=w->r?*w->d:1;R z;}
pi(i){P("%d ",i);}nl(){P("\n");}
pr(w)A w;{I r=w->r,*d=w->d,n=tr(r,d);DO(r,pi(d[i]));nl();
 if(w->t)DO(n,P("< ");pr(w->p[i]))else DO(n,pi(w->p[i]));nl();}

C vt[]="+{~<#,";
A(*vd[])()={0,plus,from,find,0,rsh,cat},
 (*vm[])()={0,id,size,iota,box,sha,0};
I st[26]; qp(a){R  a>='a'&&a<='z';}qv(a){R a<'a';}
A ex(e)I *e;{I a=*e;
 if(qp(a)){if(e[1]=='=')R st[a-'a']=ex(e+2);a= st[ a-'a'];}
 R qv(a)?(*vm[a])(ex(e+1)):e[1]?(*vd[e[1]])(a,ex(e+2)):(A)a;}
noun(c){A z;if(c<'0'||c>'9')R 0;z=ga(0,0,0);*z->p=c-'0';R z;}
verb(c){I i=0;for(;vt[i];)if(vt[i++]==c)R i;R 0;}
I *wd(s)C *s;{I a,n=strlen(s),*e=ma(n+1);C c;
 DO(n,e[i]=(a=noun(c=s[i]))?a:(a=verb(c))?a:c);e[n]=0;R e;}

main(){C s[99];while(gets(s))pr(ex(wd(s)));}
...
Рейтинг: 0 / 0
Тяпничный С++
    #39022371
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напоминает 5К-Chess. Шахматы на сях.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39022821
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovВот это я понимаю, сишник писал. Это писал не сишник, это писал придурок.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39022872
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Назывался проект по другому. (5kChess - это на JavaScript)
Но на сях был толи контестер толи песочница где сишники
колбасили свой 16k-, 32k-, chess.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39023750
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНет я всё таки невыносимый лентяй.
Неосилил гуглить уборку мусора в сях. Буду (ш)кодить в Шарпах или Жабах.

Легенда №2 (версия от 31.07.2015 коммит №1)

есть такая легенда что каждый сишник java-ист или шарпист хотя-бы раз в жизни пишет свой встроенный Lisp в своём ЯП.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class node{

	public Object right;
	public Object down;

	public node(){
	}

	public node(Object down, Object right){
		this.right = right;
		this.down  = down;
	}

}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
/**
 *  Mayton's fucken JavaLisp machine. He-he...
 *
 *  http://www.sql.ru/forum/1161214/tyapnichnyy-s
 *
 *  http://www.cis.upenn.edu/~matuszek/LispText/lisp-functions.html
 */ 
public class JLisp
{

	public static void printf(String format,Object ...args){
		System.out.printf(format,args);
	}

	public static void print(Object o){
		assert o!=null;
		System.out.print(o);
	}

	public static void printAtom(Object o){
		if (o instanceof String){
			printf("'%s'",o);
		} else {
			print(o);
		}
	}

	

	// (car '(1 2 3)) = 1
	public static node car(node n1){
		return (node)n1.down;
	}

	public static node cdr(node n1){
		return (node)n1.right;
	}

	public static node cons(node n1, node n2){
		n1.right = n2;
		return n1;
	}

	public static node list(String quotedList){
		return null;
	}

	public static boolean atom(node n1){
		return n1.right==null;
	}

	public static boolean nil(node n1){
		return n1.down==null;
	}

	public static void printList(node n){
		print("(");
		if (!atom(n)) {
			node c = n;
			while(!atom(c)){
				printAtom(c.down);
				print(",");
				c=(node)c.right;
			}
			printAtom(c.down);
		} else {
			printList((node)n.right);
		}
		print(")");
	}

	public static void main(String[] args){
		node n = new node(new String("Hello"), new node("world",null));

		printList(n);
		
	}
}                                                                                                                                                    



Вобщем если Илья с Совой решат передвинуть топик в Программинг - я не против.

Модератор: Тема перенесена из форума "C++".
уж полночь близится, а (новой)версии все нет?
...
Рейтинг: 0 / 0
Тяпничный С++
    #39024934
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlVladimir BaskakovВот это я понимаю, сишник писал. Это писал не сишник, это писал придурок.
Шоп я так жил, как придурок, который это написал ))))))) Он свою нишу нашел, и у него все хорошо. Да и пошутил я, отчасти. Код то гуглится...... Я когда его смотрел - в голове крутилась история о рождении емакса, о временах, когда визуального редактирования текста еще не было, и надо было гораздо больше держать в голове.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39024935
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как чистенько у Крокфорда, на джаваскрипте! лепота.
...
Рейтинг: 0 / 0
Тяпничный С++
    #39142895
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ап. Пока вы тут пили горькую и вкушали оливье со шпротами я накодил кое-что.

JLisp - мой эксперимент по интерграции или mapping между Java и Lisp.
Что из этого выйдент - не знаю.
Придумайте применение. Маршалинг/Сериализация. Скриптинг.
Просто поддержка languages.

Под катом модульный тест.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
package mayton;

import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

import static java.lang.Integer.valueOf;
import static mayton.JLisp.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class JLispTest {

    @Test
    public void testAtom(){
        // (atom (1))
        assertTrue(atom(new node(valueOf(1), null)));
        // (atom ())
        assertTrue(atom(new node(new node(), null)));
    }

    @Test
    public void testNil(){
        assertTrue(nil(new node(null, null)));
    }

    node nil;
    Object atom;
    Object atom2;
    Object atom3;
    Object atom4;
    node list1;
    node list2;
    node list3;

    node tree1;
    node tree2;

    node listWithNil;

    node moreComplexTree;

    @Before
    public void before(){
        // Atom
        nil = null;
        atom = valueOf(1);
        atom2 = "Hello";
        atom3 = Double.valueOf(3.14);
        atom4 = Boolean.FALSE;

        // List
        list1 = new node(valueOf(1));
        list2 = new node(valueOf(1),new node(valueOf(2),null));
        list3 = new node(valueOf(1),new node(valueOf(2),new node(valueOf(3),null)));

        listWithNil = new node(null, new node(2, new node("Three", null)));

        // Tree ((NIL))
        tree1 = new node(
                    new node(null,null),
                    null
        );
        // Tree (((NIL)))
        tree2 = new node(
                    new node(
                            new node(),
                            null),
                    null
        );

        // More Complex Tree
        // (person (name "Ivan")
        moreComplexTree = new node();

    }

    @Test
    public void stringFormatAtom() throws IOException {
        assertEquals("NIL",    JLispHelper.node2String(null));
        assertEquals("1",      JLispHelper.node2String(valueOf(1)));
        assertEquals("Hello",  JLispHelper.node2String(atom2));
        assertEquals("3.14",   JLispHelper.node2String(atom3));
        assertEquals("false",  JLispHelper.node2String(atom4));
        assertEquals("Hello \"Monkey\"",  JLispHelper.node2String("Hello \"Monkey\""));
    }


    @Test
    public void stringFormatList() throws IOException {
        assertEquals("(1)",        JLispHelper.node2String(list1));
        assertEquals("(1 2)",      JLispHelper.node2String(list2));
        assertEquals("(1 2 3)",    JLispHelper.node2String(list3));
        // Mixed list
        assertEquals("(NIL 2 \"Three\")", JLispHelper.node2String(listWithNil));

        assertEquals("(3.14 false)", JLispHelper.node2String(
                        new node(Double.valueOf(3.14), new node(Boolean.FALSE, null)))
        );
        // Nested list
        assertEquals("(NIL)",    JLispHelper.node2String(new node(null, null)));
        assertEquals("((NIL))",  JLispHelper.node2String(tree1));
        assertEquals("(((NIL)))", JLispHelper.node2String(tree2));
    }

    @Test
    public void testCons() throws IOException {
        node consList = cons(valueOf(0),list3);
        assertEquals("(0 1 2 3)", JLispHelper.node2String(consList));
    }

    /**
     * Test car
     *
     * <pre>
     *   > (car '(1 2 3))
     *   1
     *   > (car '((1) 2 3))
     *   (1)
     * </pre>
     * @throws IOException
     */
    @Test
    public void testCar() throws IOException {
        assertEquals("1",    JLispHelper.node2String(car(list3)));
    }

    /**
     * Test cdr
     * <pre>
     *     > (cdr '(1 2 3)
     *     (2 3)
     *     > (cdr (cdr '(1 2 3))
     *     (3)
     * </pre>
     * @throws IOException
     */
    @Test
    public void testCdr() throws IOException {
        assertEquals("(2 3)",    JLispHelper.node2String(cdr(list3)));
        assertEquals("(3)",    JLispHelper.node2String(cdr(cdr(list3))));
    }

}


...
Рейтинг: 0 / 0
Тяпничный С++
    #39142902
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое дополнение.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
/**
 * Lisp node
 */
public class node{

    public Object right;
    public Object down;

    public node(){
    }

    public node(Object down){
        this.right = null;
        this.down  = down;
    }

    public node(Object down, Object right){
        this.right = right;
        this.down  = down;
    }

    // equals-hashcode here

}
...
Рейтинг: 0 / 0
Тяпничный С++
    #39143974
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такие вот пирожки братия.

Надо заимлементить сложение. Да еще и с выводом типов будь они неладны. Я пока - завис.

Это эталонное поведение в CLISP 4.49
Код: ruby
1.
2.
3.
4.
5.
6.
7.
8.
[1]> (+)
0
[2]> (+ 1)
1
[3]> (+ 1 2)
3
[4]> (+ 1/3 3/5)
14/15



А вот попытка реализации. Предполагается что node - это стартовый узел списка слагаемых.
Первый символ "+" пока отсутствует. Чуть позже - добавим. Сейчас главное - сложить атомы
списка.

Чувсвтую что где-то я ошибаюсь и нужно определять сложение списка через редукцию.
Но где и на каком уровне ее надо вставить - сложно решить. Тк. действующей лисп
машины еще нет. Она - как раз в процессе создания.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    @Nonnull
    public static Object plus(@Nullable node n1){
        if (n1 == null) {
            return valueOf(0);
        } else {
            node current = n1;
            if (current.right==null){
                // TODO: Ensure that returns is subset of Number (Integer, Double, BigDecimal, Rational)
                return (Number)current.down;
            } else {
                Number accumulator = null; // = 0;
                // TODO: Implement....
                return accumulator;
            }
        }
    }



Репка тут https://sourceforge.net/p/javalisp/code/HEAD/tree/
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]