Форум программистов, компьютерный форум, киберфорум
Наши страницы
Clojure
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
1

Какие интересные концепции есть в Лиспе?

25.01.2016, 23:16. Просмотров 4348. Ответов 61
Метки нет (Все метки)

В смысле, что бы еще попробовать реализовать. На Call-CC все засматриваюсь, но для начала надо понять что это вообще такое. F-expr (функции с ленивыми аргументами) - а нужны ли они? Если значения входящих аргументов можно заквотировать. Окружение, как объект первого класса? Но ведь можно его захватить замыканием и использовать когда надо.

Добавлено через 4 минуты
Пока балуюсь подобными вещами, но это несложно:
Lisp
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
defn f (i) (cond (< i 2) 1 (* i (f (- i 1))))
OK
defn g (i a) (cond (< i 2) a (g (- i 1) (* i a)))
OK
tray f 3
  1 <- (f 3)
    2 <- f
    2 -> (lambda (i) (cond (< i 2) 1 (* i (f (- i 1)))))
    2 <- (cond (< i 2) 1 (* i (f (- i 1))))
      3 <- (< i 2)
        4 <- i
        4 -> 3
      3 -> false
      3 <- (* i (f (- i 1)))
        4 <- i
        4 -> 3
        4 <- (f (- i 1))
          5 <- f
          5 -> (lambda (i) (cond (< i 2) 1 (* i (f (- i 1)))))
          5 <- (- i 1)
            6 <- i
            6 -> 3
          5 -> 2
          5 <- (cond (< i 2) 1 (* i (f (- i 1))))
            6 <- (< i 2)
              7 <- i
              7 -> 2
            6 -> false
            6 <- (* i (f (- i 1)))
              7 <- i
              7 -> 2
              7 <- (f (- i 1))
                8 <- f
                8 -> (lambda (i) (cond (< i 2) 1 (* i (f (- i 1)))))
                8 <- (- i 1)
                  9 <- i
                  9 -> 2
                8 -> 1
                8 <- (cond (< i 2) 1 (* i (f (- i 1))))
                  9 <- (< i 2)
                    10 <- i
                    10 -> 1
                  9 -> true
                8 -> 1
              7 -> 1
            6 -> 2
          5 -> 2
        4 -> 2
      3 -> 6
    2 -> 6
  1 -> 6
6
tray g 3 1
  1 <- (g 3 1)
    2 <- g
    2 -> (lambda (i a) (cond (< i 2) a (g (- i 1) (* i a))))
    2 <- (cond (< i 2) a (g (- i 1) (* i a)))
      3 <- (< i 2)
        4 <- i
        4 -> 3
      3 -> false
      3 <- (g (- i 1) (* i a))
        4 <- g
        4 -> (lambda (i a) (cond (< i 2) a (g (- i 1) (* i a))))
        4 <- (- i 1)
          5 <- i
          5 -> 3
        4 -> 2
        4 <- (* i a)
          5 <- i
          5 -> 3
          5 <- a
          5 -> 1
        4 -> 3
      3 -> FUNCALL: {a=3, i=2}
    2 -> FUNCALL: {a=3, i=2}
    2 <- (cond (< i 2) a (g (- i 1) (* i a)))
      3 <- (< i 2)
        4 <- i
        4 -> 2
      3 -> false
      3 <- (g (- i 1) (* i a))
        4 <- g
        4 -> (lambda (i a) (cond (< i 2) a (g (- i 1) (* i a))))
        4 <- (- i 1)
          5 <- i
          5 -> 2
        4 -> 1
        4 <- (* i a)
          5 <- i
          5 -> 2
          5 <- a
          5 -> 3
        4 -> 6
      3 -> FUNCALL: {a=6, i=1}
    2 -> FUNCALL: {a=6, i=1}
    2 <- (cond (< i 2) a (g (- i 1) (* i a)))
      3 <- (< i 2)
        4 <- i
        4 -> 1
      3 -> true
      3 <- a
      3 -> 6
    2 -> 6
  1 -> 6
6
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2016, 23:16
Ответы с готовыми решениями:

Какие есть интересные функции в C#?
Какие есть интересные функции в C#? P.S Чтобы приукрасить свою работу

Кто во что сейчас играет и какие есть интересные браузерные игры?
Поделитесь информацией, кто во что сейчас играет? Какие есть интересные браузерные игры? Так...

Может у вас в архивчике есть какие нибудь интересные задачи на тему Word такие по сложнее.
Здравствуйте. Вам постоянно задают различные вопросы и присылают задачи. Может у вас в архивчике...

Кто какие знает интересные компоненты VCL
Кто какие знает интересные компоненты VCL( кроме тех, что вошли в шестой билдер:))???

Какие модели из перечисленных, самые интересные по вашему мнению?
Хочу попросить попросить помощи, не могу остановиться на чем то конкретном. Хотелось бы услышать...

61
castorsky
30.01.2016, 00:05     Какие интересные концепции есть в Лиспе?
  #21

Не по теме:

Значит я этого не заметил. Надеюсь Вы не в обиде на меня за то что я так мало уделял внимания Вашему диалекту =)

0
_Ivana
30.01.2016, 00:11  [ТС]
  #22

Не по теме:

Я отдаю себе отчет в том, что мало кому интересны чьи-то наколенные поделки, кроме автора :) По крайней мере, до тех пор, пока они не начинают превосходить существующие аналоги (на что я конечно не рассчитываю, тем более в интерпретируемой версии). Со своей стороны надеюсь, что моя активность в этом разделе со своей кустарщиной не сильно мешает. Но мне действительно интересно на этом примере познакомиться с особенностями данного семейства языков.

0
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
01.02.2016, 04:15  [ТС] 23
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(def window-size 500)
(def image (java (class "java.awt.image.BufferedImage") "new" window-size window-size 1))
(def imageGraphics (java image "getGraphics"))
 
(defmacro v-s () (java (* window-size (java (class "java.lang.Math") "random")) "intValue"))
(defn random-line (p)
    (def x (v-s) y (v-s))
    (java imageGraphics "drawLine" (car p) (cadr p) x y)
    (cons x y))
(ntimes 50 random-line (cons (v-s) (v-s)))
 
(def icon (java (class "javax.swing.ImageIcon") "new"))
(java icon "setImage" image)
(def label (java (class "javax.swing.JLabel") "new"))
(java label "setIcon" icon)
(def labelComponent (java label "castComponent"))
 
(def window (java (class "javax.swing.JFrame") "new"))
(java window "add" labelComponent)
(java window "setVisible" true)
(java window "pack")
5
Миниатюры
Какие интересные концепции есть в Лиспе?  
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
01.02.2016, 06:10  [ТС] 24
Lisp
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
(defn demo (delta a b phi)
    (def image (java (class "java.awt.image.BufferedImage") "new" w-s w-s 1))
    (def imageGraphics (java image "getGraphics"))
    (defmacro p-x (alpha) (norm (sin (+ (* a alpha) phi))))
    (defmacro p-y (alpha) (norm (cos (* b alpha))))
 
    (defn next-line (args)
        (match args '(alpha x0 y0))
        (def x (p-x alpha) y (p-y alpha))
        (java imageGraphics "drawLine" x0 y0 x y)
        (cons (+ alpha delta) x y))
 
    (ntimes 500 next-line (cons 0 (p-x 0) (p-y 0)))
    (add-image window image))
 
(def window (java (class "javax.swing.JFrame") "new"))
(java window "setLayout" (java (class "java.awt.FlowLayout") "new"))
(demo 2.5 1 1 0)
(demo 2   2 1 0)
(demo 2   1 2 0.3)
(demo 1   1 3 0.5)
(demo 1   3 1 0.5)
(demo 0.6 3 2 0.5)
(java window "setVisible" true)
(java window "pack")
5
Миниатюры
Какие интересные концепции есть в Лиспе?  
01.02.2016, 06:10
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
01.02.2016, 13:56  [ТС] 25
Это все через ограниченный механизм reflection. А вчера мне сказали, что это все баловство и можно оказывается вообще любой текст java-кода на лету скомпилировать и в приложение загрузить - попробую внедрить и это, если получится.
0
Catstail
Модератор
24603 / 12511 / 2284
Регистрация: 12.02.2012
Сообщений: 20,328
01.02.2016, 14:15 26
_Ivana, странно, что в коде x вычисляется с исп. синуса, а y - косинуса. Обычно бывает наоборот.
0
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
01.02.2016, 14:20  [ТС] 27
Catstail, ну у меня не наработаны еще эти стереотипы И в 6 часов ночи срабатывают более простые правила - изоморфность и изотропность осей и направлений (с точностью до поворота монитора) и то, что традиционно первые в парах x и sin, а вторые - y и cos, я даже a и b сообразно этому принципу распределил Но Вы можете поменять

ЗЫ матчер мой там конечно для выпендрежа, из-за ntimes, принимающей функцию одного аргумента, можно было просто хвостовую рекурсию с 4 параметрами написать.
0
Catstail
Модератор
24603 / 12511 / 2284
Регистрация: 12.02.2012
Сообщений: 20,328
01.02.2016, 18:08 28
Мне захотелось посмотреть, как это будет выглядеть в HomeLisp... Вот:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(defun main ()
  (iter (for parms in (list (list 2.5 1.0 1.0 0.0 _RED)
                            (list 2.0 2.0 1.0 0.0 _GREEN) 
                            (list 2.0 1.0 2.0 0.3 _BLUE) 
                            (list 1.0 1.0 3.0 0.5 _YELLOW) 
                            (list 1.0 3.0 1.0 0.5 _SILVER) 
                            (list 0.6 3.0 2.0 0.5 _NAVY)))
         (apply 'make-pic parms))
   (grwShowAll -1))
    
(defun make-pic (delta a b phi color)
  (let ((w (gensym 'w))
        (x-0 0)
        (y-0 0)
        (x-1 0)
        (y-1 0)
        (alpha 0))  
   (grwCreate w 300 300 "" _WHITE)
   (grwScale w -1.1 1.1 -1.1 1.1)
   (iter (for i from 1 to 400)
     (setq x-1 (sin (+ (* a alpha) phi))
           y-1 (cos (* b alpha)))
     (when (> i 1) (grwLine w x-0 y-0 x-1 y-1 color))
     (setq alpha (+ alpha delta) x-0 x-1 y-0 y-1))))
Кстати, когда икс с игреком перепутаны, симпатичнее выходит...
5
Миниатюры
Какие интересные концепции есть в Лиспе?  
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
02.02.2016, 12:02  [ТС] 29
Catstail, хорошо, следующий раунд - цвета и заливка полигонов
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defn tree (graph n x y d d0 l v i)
    (def x1 (round (+ x (* l (cos d)))) y1 (round (+ y (* l (sin d)))))
    (def p (java (class "java.awt.Polygon") "new"))
    (java p "addPoint" x y)
    (java p "addPoint" x1 y1)
    (def kl (/ l 5))
    (def x0 (round (- x (* kl (cos d0)))) y0 (round (- y (* kl (sin d0)))))
    (java p "addPoint" x0 y0)
    (java graph "setColor" BROWN)
    (java graph "fillPolygon" p)
    (java graph "drawPolygon" p)
    (cond (> n 0)
             ((defmacro delta () (* v (rand (/ pi 20) (/ pi 4.5))))
              (tree graph (- n 1) x1 y1 (- d (delta)) d (/ l 1.2) (- 0 v) i)
              (tree graph (- n 2) x1 y1 (+ d (delta)) d (/ l 1.2) (- 0 v) i))
             ((java graph "setColor" RED)
              (java graph "fillOval" (- x1 10) (- y1 10) 20 20)
              (cond (< (rnd) 0.7)
                    ((java graph "setColor" BLACK)
                     (java graph "fillOval" (- x1 2) (- y1 6) 4 4))) )))
5
Миниатюры
Какие интересные концепции есть в Лиспе?   Какие интересные концепции есть в Лиспе?  
Catstail
Модератор
24603 / 12511 / 2284
Регистрация: 12.02.2012
Сообщений: 20,328
03.02.2016, 10:38 30
_Ivana, Ваш код довольно небрежен... У функции tree, к примеру, лишний (не используемый) параметр...

В HomeLisp это выглядит так:

Lisp
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
;; Главная функция
 
(defun main (&optional (x-start 0)  (y-start -100))
  (let ((w (gensym 'w)))
    (grwCreate w 500 500 "Дерево" _WHITE)
    (grwSetParm w 2 0 _WHITE)
    (grwScale w -100 100 -100 100)
    (grwShow w)
    (tree w 8 x-start y-start (* 0.5 _pi) (* 0.3 _pi) 40 0.6)))
 
;; Дать случайный элемент списка
    
(defun random-value (&rest lst)
  (nth (mod (rnd 1000) (length lst)) lst))
 
;; Нарисовать треугольник
    
(defun draw-triangle (w x1 y1 x2 y2 x3 y3 color)
    (grwLine w x1 y1 x2 y2 color)
    (grwLine w x2 y2 x3 y3 color)
    (grwLine w x1 y1 x3 y3 color)
    (let* ((bx (/ (+ x1 x2 x3) 3.0))
           (by (/ (+ y1 y2 y3) 3.0)))
       (grwFill w  bx  by color color)))
 
;; Изобразить дерево
 
(defun tree (w n x y d d0 l v)
  (let* ((x1 (+ x (* l (cos d))))
         (y1 (+ y (* l (sin d))))
         (kl (/ l 5.0))
         (x0 (- x (* kl (cos d0))))         
         (y0 (- y (* kl (sin d0))))
         (delta (* v (random-value (/ _pi 3.0) (/ _pi 4.5)))))
        (draw-triangle w x y x0 y0 x1 y1 _BROWN)
        (cond ((plusp n)
                (tree w (- n 1) x1 y1 (- d delta) d (/ l 1.2) (- v))
                (tree w (- n 2) x1 y1 (+ d delta) d (/ l 1.2) v))
              (t (grwCircle w x1 y1 5 _RED)
                 (grwFill w x1 y1 _RED _RED)
                 (grwPset w x1 y1 _BLACK)))))
5
Миниатюры
Какие интересные концепции есть в Лиспе?  
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
03.02.2016, 19:40  [ТС] 31
Catstail, ну небрежность имхо все-таки не совсем объективный параметр. Что одному небрежно, другому нормально. Лишний параметр - есть, но это последний код, рисующий рябины. Для предыдущей картинки с ростом и взрослением дерева он использовался - задавал номер картинки и как следствие, максимальный диапазон размаха ветвей (он у меня там расширяется от первой картинки к последней). Да и вообще, это не весь полный кот (чтобы не загромождать ветку лишним), а только его собственно содержательная часть. Однако, вам хватило ее, чтобы реализовать в вашей системе. А большего от кода и не требовалось
1
Catstail
Модератор
24603 / 12511 / 2284
Регистрация: 12.02.2012
Сообщений: 20,328
04.02.2016, 13:17 32
_Ivana, да упаси Боже, я не имел в виду Вас задеть! Просто разобраться было нужно. А так-то - дело житейское.
0
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
04.02.2016, 14:05  [ТС] 33

Не по теме:

Catstail, при всей моей обидчивости, у меня к Вам весьма большой (честно заработанный) кредит расположения :)



ЗЫ анонс - на очереди Тетрис: 2 потока (в двух закладках интерпретатора), общее пространство имен, один меняет геймстейт по таймеру, другой - в циклическом ожидании блокирующего ввода, управляет геймстейтом в зависимости от ввода. Все это дело рефрешится в отдельном графическом окне, которое всегда "он топ".
Единственный недостаток - ввод по контрол+энтеру, слушателя клавиш пока не осилил подключить (без изменения собственно интерпретатора). Ну и еще контейнер хранения пространства имен у меня не потокобезопасный (может пока), поэтому можно самому влепить флаги блокировки изменения стейта и проверять/устанавливать/сбрасывать их - но посмотрим еще, может для простой игрушки и без них сойдет.
1
Catstail
04.02.2016, 16:36
  #34

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
у меня к Вам весьма большой (честно заработанный) кредит расположения
- взаимно!

0
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
06.02.2016, 00:44  [ТС] 35
Обещанный Тетрис - полный кот. Java используется только для отрисовки ну и пара немутируемых мапов задействована - типы и цвета фигур, хотя их тривиально на списки перевести, там доступ по индексу нужен только.
Как написано выше - 2 потока в двух закладках, в одном запускается timer-thread, в другом user-input.
Lisp
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
(defmacro rnd () (java (class "java.lang.Math") "random"))
(defmacro color (r g b) (java (class "java.awt.Color") "new" r g b))
 
(def  item-vars (java (class "java.util.HashMap") "new"))
 
(java item-vars "put" 0 '((0 -1) (0 0) (-1 -1) (-1 0)))
(java item-vars "put" 1 '((0 -1) (0 0) (-1 -1) (-1 0)))
(java item-vars "put" 2 '((0 -1) (0 0) (-1 -1) (-1 0)))
(java item-vars "put" 3 '((0 -1) (0 0) (-1 -1) (-1 0)))
 
(java item-vars "put" 10 '((0 -2) (0 -1) (0 0) (0 1)))
(java item-vars "put" 11 '((1 0) (0 0) (-1 0) (-2 0)))
(java item-vars "put" 12 '((0 -2) (0 -1) (0 0) (0 1)))
(java item-vars "put" 13 '((1 0) (0 0) (-1 0) (-2 0)))
 
(java item-vars "put" 20 '((-1 -1) (-1 0) (0 0) (0 1)))
(java item-vars "put" 21 '((1 0) (0 0) (0 1) (-1 1)))
(java item-vars "put" 22 '((-1 -1) (-1 0) (0 0) (0 1)))
(java item-vars "put" 23 '((1 0) (0 0) (0 1) (-1 1)))
 
(java item-vars "put" 30 '((0 -1) (0 0) (-1 0) (-1 1)))
(java item-vars "put" 31 '((-1 0) (0 0) (0 1) (1 1)))
(java item-vars "put" 32 '((0 -1) (0 0) (-1 0) (-1 1)))
(java item-vars "put" 33 '((-1 0) (0 0) (0 1) (1 1)))
 
(java item-vars "put" 40 '((0 -1) (0 0) (0 1) (-1 -1)))
(java item-vars "put" 41 '((1 0) (0 0) (-1 0) (-1 1)))
(java item-vars "put" 42 '((0 -1) (0 0) (0 1) (1 1)))
(java item-vars "put" 43 '((1 0) (0 0) (-1 0) (1 -1)))
 
(java item-vars "put" 50 '((0 -1) (0 0) (0 1) (-1 1)))
(java item-vars "put" 51 '((1 0) (0 0) (-1 0) (1 1)))
(java item-vars "put" 52 '((0 -1) (0 0) (0 1) (1 -1)))
(java item-vars "put" 53 '((1 0) (0 0) (-1 0) (-1 -1)))
 
(java item-vars "put" 60 '((0 -1) (0 0) (0 1) (-1 0)))
(java item-vars "put" 61 '((1 0) (0 0) (-1 0) (0 1)))
(java item-vars "put" 62 '((0 -1) (0 0) (0 1) (1 0)))
(java item-vars "put" 63 '((1 0) (0 0) (-1 0) (0 -1)))
 
(def BLACK (color 0 0 0))
(def WHITE (color 255 255 255))
 
(def  item-colors (java (class "java.util.HashMap") "new"))
(java item-colors "put" 0 (color 240 240 0))
(java item-colors "put" 1 (color 0 240 240))
(java item-colors "put" 2 (color 0 240 0))
(java item-colors "put" 3 (color 240 0 0))
(java item-colors "put" 4 (color 240 160 0))
(java item-colors "put" 5 (color 0 0 240))
(java item-colors "put" 6 (color 160 0 240))
 
(defn coords (i)
    (match i '(t o r c))
    (def coords-basic (java item-vars "get" (+ (* 10 t) o) ))
    (map (lambda (p) (cons (+ r (car p)) (+ c (cadr p)))) coords-basic))
 
(defn draw-coord (r c cur-color)
    (java imageGraphics "setColor" cur-color)
    (java imageGraphics "fillRect"
        (* c sq-size) (* (- rows r 1) sq-size) (- sq-size 1) (- sq-size 1)))
 
(defn draw-item (cur-color)
    (foldl (lambda (p a) (draw-coord (car p) (cadr p) cur-color)) 0 (coords item)))
 
(defn draw-field ()
    (java imageGraphics "clearRect" 0 0 image-width image-height)
    (foldl (lambda (x a) (match x '(r c cur-color)) (draw-coord r c cur-color)) 0 field))
 
(defn try-move (i)
    (defn good-coord (p)
        (def r (car p) c (cadr p))
        (cond (< c 0) false (>= c cols) false (< r 0) false
              (any (lambda (x) (and (= r (car x)) (= c (cadr x)) )) field) false true))
    (cond (all good-coord (coords i)) (
              (draw-item WHITE)
              (set! item i)
              (draw-item (java item-colors "get" (car item)))
              (java window "revalidate")
              (java window "repaint")
              true)
          false))
 
(defn compress-field ()
    (defn collect (e a)
        (def r (car e))
        (cond (null? a) (cons (cons r 1) nil)
              (eq? r (car (car a))) (cons (cons r (+ 1 (car (cdr (car a))))) (cdr a))
              (cons (car a) (collect e (cdr a))) ))
 
    (def full-rows (foldl
        (lambda (x a) (cond (< (cadr x) cols) a (cons (car x) a) ))
        nil (foldl collect nil field)))
 
    (defn low-f-rs-cnt (r) (foldl (lambda (x a) (cond (< x r) (+ 1 a) a)) 0 full-rows))
 
    (defn go (f a)
        (def e (car f) r (car e))
        (cond (null? f) a
              (elem r full-rows) (go (cdr f) a)
                  (go (cdr f) (cons (cons (- r (low-f-rs-cnt r)) (cdr e)) a)) ))
 
    (cond (null? full-rows) false ((set! field (go field nil)) true) ))
 
(defn user-input ()
    (def cmd (read))
    (match item '(t o r c))
    (cond (eq? cmd 'a) (try-move (cons t o r (- c 1)))
          (eq? cmd 'd) (try-move (cons t o r (+ c 1)))
          (eq? cmd 'q) (try-move (cons t (mod (+ o 1) 4) r c))
          (eq? cmd 'e) (try-move (cons t (mod (+ o 3) 4) r c))
          (eq? cmd 's) (fall-down)
          (eq? cmd 'p) (set! game-run false)
          (set! game-run true))
    (user-input))
 
(defn fall-down ()
    (match item '(t o r c))
    (cond (try-move (cons t o (- r 1) c)) (fall-down)))
 
(defn timer-thread ()
    (java (class "java.lang.Thread") "sleep" 1000)
    (match item '(t o r c))
    (cond game-run
        (cond (not (try-move (cons t o (- r 1) c))) (
            (set! field (foldl
                (lambda (p a) (cons (append p (java item-colors "get" (car item))) a))
                field (coords item)))
            (cond (compress-field) (draw-field))
            (set! item (cons (java (* 7 (rnd)) "intValue") 0 (- rows 1) (/ cols 2)))
            (cond (not (try-move item)) (set! game-run false))
            )))
    (timer-thread))
 
; main program ;
 
(def cols 10 rows 20 sq-size 30 field nil game-run false)
(def image-width (+ 1 (* cols sq-size)) image-height (+ 1 (* rows sq-size)))
 
(def image (java (class "java.awt.image.BufferedImage") "new" image-width image-height 1))
(def imageGraphics (java image "createGraphics"))
(java imageGraphics "setBackground" WHITE)
(java imageGraphics "clearRect" 0 0 image-width image-height)
 
(def item (cons (java (* 7 (rnd)) "intValue") 0 (- rows 1) (/ cols 2)))
(draw-item (java item-colors "get" (car item)))
 
(def window (java (class "javax.swing.JFrame") "new"))
(def icon (java (class "javax.swing.ImageIcon") "new"))
(java icon "setImage" image)
(def label (java (class "javax.swing.JLabel") "new"))
(java label "setIcon" icon)
(java window "add" label)
(java window "setVisible" true)
(java window "setAlwaysOnTop" true)
(java window "pack")
 
(timer-thread)
;
call if another thread :
(user-input)
;
"Game over."
5
Миниатюры
Какие интересные концепции есть в Лиспе?   Какие интересные концепции есть в Лиспе?  
_Ivana
4062 / 1896 / 237
Регистрация: 01.03.2013
Сообщений: 5,147
Записей в блоге: 22
17.09.2016, 08:51  [ТС] 36
Lisp
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
; Прыгающие шарики, анимация. ;
; Задаем ширину / высоту окна, количество и максимальный радиус шариков ;
(defn bouncing-balls (w-width w-height n-balls r-ball-max)
 
    ; макросы, которым место в стандартной библиотеке ;
    (defmacro rnd () java (class "java.lang.Math") "random")
    (defmacro round (x) java x "intValue")
 
    ; смещает координату / скорость шарика по одной оси ;
    (defn move-dir (ball ind-x ind-dx x-max)
        (def x (java ball "get" ind-x)
            dx (java ball "get" ind-dx)
             r (java ball "get" 5)
             x-new (+ x dx) m (- x-max r))
        (java ball "put" ind-x  (cond (< x-new r) r (> x-new m) m x-new))
        (java ball "put" ind-dx (cond (<= r x-new m) dx (- 0 dx))) )
 
    ; смещает и отрисовывает шарик ;
    (defn move-draw (ball)
        (move-dir ball 0 1 w-width)
        (move-dir ball 2 3 w-height)
        (def x (java ball "get" 0)
             y (java ball "get" 2)
             r (java ball "get" 5) d (* 2 r))
        (java img-gr "setColor" (java ball "get" 4))
        (java img-gr "fillOval" (- (round x) r) (- (round y) r) d d) )
 
    ; добавляет уникальный шарик со своими координатами, скоростью и цветом;
    (defn add-new-ball ()
        (defn rnd-dx () (def v (+ (* v-max (rnd)) 1)) (cond (< (rnd) 0.5) v (- 0 v)) )
        (defn rnd-rgb () (round (* 200 (rnd)) ))
        (def color (java (class "java.awt.Color") "new" (rnd-rgb) (rnd-rgb) (rnd-rgb)))
        (def ball (java (class "java.util.HashMap") "new"))
        (java ball "put" 0 (/ w-width 2))
        (java ball "put" 1 (rnd-dx))
        (java ball "put" 2 (/ w-height 2))
        (java ball "put" 3 (rnd-dx))
        (java ball "put" 4 color)
        (java ball "put" 5 (+ (round (* (- r-ball-max 5) (rnd))) 5))
        (java balls "put" (+ (java balls "size") 1) ball))
 
    ; анимация - очистка экрана, смещение и отрисовка шариков, обновление окна, пауза ;
    (defn go () while true 
        (java img-gr "clearRect" 0 0 w-width w-height)
        (def n n-balls)
        (while (> n 0) (move-draw (java balls "get" n)) (set! n (- n 1)))
        (java window "repaint")
        (java (class "java.lang.Thread") "sleep" 30))
 
    ; параметры окна и графики, вызываются макросы стандартной библиотеки ;
    (def image (new-image w-width w-height))
    (def img-gr (new-imageGraphics image))
    (java img-gr "setBackground" (java (class "java.awt.Color") "new" 255 255 200))
    (def window (new-window "FlowLayout"))
    (add-image window image)
    (java window "setLocationByPlatform" true)
    (java window "setVisible" true)
    (java window "setAlwaysOnTop" true)
    (java window "setTitle" (java "Bouncing balls" "toString"))
    (java window "pack")
 
    (def balls (java (class "java.util.HashMap") "new"))
    (def v-max 7 n n-balls)
    (while (> n 0) (add-new-ball) (set! n (- n 1)))
    (go))
 
(bouncing-balls 500 400 100 30)
Гифка какая-то дерганная получилась, на экране все плавно...
3
Миниатюры
Какие интересные концепции есть в Лиспе?  
budden
198 / 99 / 4
Регистрация: 16.08.2015
Сообщений: 193
18.09.2016, 14:54 37
Ivana, у нас есть один такой пример на Common Lisp и tcl/tk.
https://bitbucket.org/budden/yar/src...ор/?at=default
Присоединяйтесь к нам, у нас всё то же самое, но по-взрослому, с компиляцией в двоичный код.
0
ИсмаилПркопенко
Заблокирован
18.09.2016, 14:59 38
Цитата Сообщение от Catstail Посмотреть сообщение
Самое ценное в Лиспе, это, вероятно, макро. Именно они позволяют называть Лисп "программируемым языком программирования"
Что Вы имеете в виду?
Случайно не это: Выбор языка для программ, анализирующих и меняющих свой же собственный код
0
Catstail
Модератор
24603 / 12511 / 2284
Регистрация: 12.02.2012
Сообщений: 20,328
18.09.2016, 18:25 39
ИсмаилПркопенко, в общем - да.

Добавлено через 1 час 0 минут
_Ivana, у Вас шарики друг с другом сталкиваются? Или только со стенками?
0
vlisp
564 / 538 / 116
Регистрация: 10.08.2015
Сообщений: 2,042
Завершенные тесты: 1
18.09.2016, 19:43 40
А разве сталкивание шариков - это концепция? Вообще обращение с java как с С - это анахронизм. java - классовый язык. А что тут мы видим? Никакого ООП... вот как бы это могло выглядеть, если б было концептуально продумано
Lisp
1
2
3
4
5
6
7
8
9
10
11
(setq jvmObj (jvm-get-or-create-object)
 
      FrameObj  (jvm-CreateFrame jvmObj ... )
 
      CanvasObj (jvm-get-Canvas jvmObj)
 
      CircleObj (jvm-AddCircle CanvasObj '(100 100) 20))
 
(jvm-put-Color CircleObj (jvm-GetTrueColor jvmObj '( 127 255 0)))
 
(jvm-MoveTo CircleObj '(150 150))
Как минимум для следует разделять свойства и методы с помощью конструкций
invoke-method get-property put-property
и только для увеличения читабельности и дифференциации кода можно использовать приставку java-
java-invoke-method java-invoke java-get-property java-put-property
0
18.09.2016, 19:43
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2016, 19:43

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих...

Множества. Какие газеты не поступают ни в один из киосков; какие газеты бывают в каждом; какие есть хотя бы в одном
В три газетных киоска поступают газеты из имеющегося списка. Определить какие газеты не поступают...

Разработка и маркетинг если есть интересные идеи
Готов взятся за исполнение и маркетинг интересных идей за долю в проекте Сам был в такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru