-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMyScript.cpp
More file actions
71 lines (66 loc) · 1.83 KB
/
MyScript.cpp
File metadata and controls
71 lines (66 loc) · 1.83 KB
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
// MyScript.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
#include "CLisp.h"
using namespace std;
auto lib = R"(
(print "Init... ")
(define nil ())
(define quote (flambda (form) (car form)))
(define list (lambda args args))
(define dolist (lambda args (let () args)))
(define caar (lambda (x) (car (car x))))
(define cadr (lambda (x) (car (cdr x))))
(define cadr (lambda (x) (car (cdr x))))
(define cdar (lambda (x) (cdr (car x))))
(define cddr (lambda (x) (cdr (cdr x))))
(define cadar (lambda (x) (car (cdr (car x)))))
(define caddar (lambda (x) (car (cdr (cdr (car x))))))
(define global-environment
(let ((globals ((flambda (args env) env))))
(lambda () globals)))
(define double (lambda (x) (+ x x)))
(define make-counter (lambda (n) (lambda () (setq n (+ n 1)))))
(setq *syntax-table*
(cons (cons 'for
(flambda (form)
(list 'let (list (list (caar form) (cadar form)))
(list 'while (list '<= (caar form) (caddar form))
(cadr form)
(list 'setq (caar form) (list '+ 1 (caar form)))))))
*syntax-table*))
(println "Done")
)";
auto test = R"(
(define print-line (lambda (a b n)
(for (i 1 (- n 1)) (let () (print a) (print b)))
(println a)
))
(define test (lambda ()
(dolist
(print-line "-" " " 20)
(println "Hello world!")
(println "Refer: http://piumarta.com/software/lysp/lysp-1.1/lysp.c")
(println "Using: ANTLR 4.7")
(println "Author: bajdcc")
(print-line "-" " " 20)
)))
)";
int main()
{
CLisp lisp;
auto value = lisp.run(lib);
value = lisp.run(test);
for (;;)
{
cout << ">> ";
string in;
getline(cin, in);
if (in.empty())
break;
value = lisp.run(in);
//if (value)
// lisp.println(value, std::cout);
}
return 0;
}