Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/186: Рейтинг темы: голосов - 186, средняя оценка - 4.69
92 / 59 / 8
Регистрация: 09.11.2011
Сообщений: 443

Полезные коды и авторские программы на Lisp

30.10.2014, 09:43. Показов 44123. Ответов 132
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Расскажите, пожалуйста, что на лиспе пишите? вкратце, хотя бы. Очень интересно.
Понятно, что студенты пишут лабы, но вот все остальные, чем занимаются?
Сам пока ничего не пишу, а учу язык, но есть задумки написать веб-сервер для парсинга отчетов от АТС-ки. Заходит админ на него и смотрит кто куда и во сколько звонил по офису, статистика всякая там и прочее.
В общем не стесняйтесь, похвастайтесь, может сумеете заинтересовать случайного прохожего языком.
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2014, 09:43
Ответы с готовыми решениями:

Полезные коды и проекты на VBA
В этой теме предлагаю выкладывать различные коды и готовые проекты VBA, которые, на Ваш взгляд, могут помочь новичкам в разработке как...

Полезные коды для PascalABC.NET
В этой теме размещаются полезные исходники программ, различные процедуры и функции, а так же готовые решения на часто задаваемые вопросы,...

Готовые решения и полезные коды на Visual Basic 6.0
Запрещаются любые обсуждения выложенных здесь работ (читаем спойлер). Собственно тут буду публиковать разные коды (как собственные или...

132
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
30.07.2017, 21:39
Студворк — интернет-сервис помощи студентам
Перевод чисел с арабской системы счисления в римскую:
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
(defun ArabRim ()
(setf R (vector "M" "D" "C" "L" "X" "V" "I"))
(format t "Vvedite Arab = ")
(setf Arab (read))
(format t "Arab = ~A ==> Rim = " Arab)
(setf end (floor Arab 1000))
  (do ((i 1 (+ i 1)))
      ((> i end) 'done)
    (format t "M"))
  (do ((j 0 (+ j 1)))
      ((> j 2) 'done)
(setf s  (/ (- (mod Arab (expt 10 (- 3 j))) (mod Arab (expt 10 (- 2 j)))) (expt 10 (- 2 j))))
(setf I  (+ (* 2 j) 2))
(setf V  (+ (* 2 j) 1))
(setf X  (* 2 j))
(setf s1 (- s 5))
(cond ((= 0 s) (format t "" ))
      ((= 4 s)(format t "~A" (concatenate 'string (svref R I) (svref R V))))
      ((= 9 s)(format t "~A" (concatenate 'string (svref R I) (svref R X))))
      ((and (< 0 s) (< s 4))
       (do ((k 1 (+ k 1)))
         ((> k s) 'done)
         (format t "~A" (svref R I))))
      ((<= 0 s1) (format t "~A" (svref R V)) 
       (do ((l 1 (+ l 1)))
         ((> l s1) 'done)
         (format t "~A" (svref R I)))))))
Данная функция может быть переписана в более простой вариант следующим способом:
1. s может стать списком при превращении числа Arab в строку (с последующим
преобразованием строки в список символов)
2. К списку будет применена функция ВП, которая, в свою очередь будет применять к
символам функцию превращения их в римские числа (которые будут образовывать
список)
3. Слияние символов в строку и её печать.
P.S. Это моя "фетиш-прога".
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.07.2017, 22:28
Ужасно. Сегодня написал по другому поводу, но к вашему коду тоже относится: Решение квадратного уравнения Хотите — создайте тему, обсудим.
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
31.07.2017, 12:09
Я уже выше писал, что сделал программу расчёта двигателя Стирлинга. Теперь добавлю, что я вообще писал и использовал на CL.

- искусственный интеллект (немного не дописал, ха-ха)
- систему управления жизненным циклом базы данных Firebird (хранение исходников процедур, таблиц и триггеров в hg, сборка серверной части за одну команду, автогенерация представлений и интерфейсов для редактирования таблиц)
- макросы для Firebird (сокращать часто используемые фрагменты текста)
- генерацию процедур на SQL для отчётов по опросным листам
- конвертер данных об экспериментах из XML в Firebird
- конвертер данных о торговле из dbf в Firebird + интеграция данных из нескольких баз, работал в продакшене несколько лет
- моделирование работы системы ветрогенератор-аккумулятор по архиву метеоданных
- управление печью (читаем температуру, подаём сигнал на блок питания нагревателя)
- сервер приложений (среднее звено в трёхзвенке)
- среду для запуска тестов расчётной программы
- транслятор с языка 1С 7.7 на лисп (без языка запросов и без форм. Язык сделал, стандартную библиотеку не доделал)
- расширения функции read: привязки макросов чтения к символам, а не к буквам, перехват процесса чтения символа, запоминание положения прочитанных скобок и т.п.
- совместно с monk - библиотеку для версионного состояния с поддержкой версионных структур, хеш-таблиц, консов и массивов
- совместно с monk - версию интерпретатора SBCL с поддержкой call/cc.

Может выглядеть очень впечатляюще, но на самом деле большинство моих проектов довольно самопальные по качеству Тот мой код, который можно опубликовать, находится здесь: https://bitbucket.org/budden/

Сейчас делаю язык программирования Яр, транслируемый в Common Lisp, а также среду разработки clcon, поддерживающую tcl/tk, Common Lisp, язык Яр и markdown.
1
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
31.07.2017, 18:34
Крутой ты)

Добавлено через 8 минут
Собственны язык, да и еще со стандартом) А он какую парадигму представляет? По чем учился компиляторы писать? Книга драконов?
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
31.07.2017, 20:32
Вопросы по моему ЯП лучше обсуждать в соответствующей теме
0
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
19.02.2018, 08:39
https://github.com/CodyReichert/awesome-cl
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
23.02.2018, 14:32
Уже давно выложил свои заметки про устройство SBCL. Они не особо упорядочены и системны. Я делал их, когда пробовал свои силы в модификации SBCL под свои нужды.

http://программирование-по-рус... -docs.html

Сам генератор документов написан на смеси Common Lisp и Javascript. Чтобы определить статью, нужно вызвать макрос лиспа и дать ему текст статьи в виде markdown. Далее, библиотека showdown, написанная на javascript и транслированная с javascript на Common Lisp с помощью транслятора cl-javascript превращает эти кусочки в html. Далее небольшой кусок кода на лиспе составляет оглавления и т.п.

Всё это можно взять в моём сборнике (Яре), но это там не документированно. Если кому-то интересно, пишите письма, адрес есть на сайте.

Также есть никак не связанный с моим проект документирования SCBL: https://github.com/guicho271828/sbcl-wiki/wiki

Так что если преподавателям нечем занять студентов, то их можно занять анализом и документированием тех частей SBCL, которые не документированы.
1
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
02.05.2018, 14:48
These months in Common Lisp: Q1 2018
https://lisp-journey.gitlab.io... p-q1-2018/
1
Заблокирован
04.03.2020, 14:27
Делать было нечего, написал простую консольную игрушку с крутым названием))) с комментариями около 500 строк вышло всего)
Миниатюры
Полезные коды и авторские программы на Lisp  
1
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
04.03.2020, 17:03
а где приглашение, Знаток? Где код? как можно зайти и выйти одновременно?
0
Заблокирован
04.03.2020, 18:59
Цитата Сообщение от vlisp Посмотреть сообщение
Где код?
500 строк тут запостить?
Цитата Сообщение от vlisp Посмотреть сообщение
как можно зайти и выйти одновременно?
Очень просто: выход - это выход из игры.
Вход - это авторизация: логин и пароль
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
04.03.2020, 19:24
А когда зайдешь в аккаунт, будет два выхода?
есть зип файлы
0
Заблокирован
04.03.2020, 19:27
Цитата Сообщение от vlisp Посмотреть сообщение
А когда зайдешь в аккаунт, будет два выхода?
Есть выход в меню и выход совсем из игры.
Цитата Сообщение от vlisp Посмотреть сообщение
есть зип файлы
Ну если хочешь, я могу файл прикрепить: я не собирал ее через Lein и все одним файлом, так как это просто практика)
0
Заблокирован
04.03.2020, 19:35
vlisp, вот файл, если хочешь
Он на Clojure и для подсветки синтаксиса в редакторе нужно изменить расширение с txt yf clj соответственно
Вложения
Тип файла: txt Game.txt (16.7 Кб, 11 просмотров)
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
04.03.2020, 19:35
просто эта тема про коды, а не про картинки. создай гитхаб, выложи туда, дай ссылку здесь. в чем проблема. да даже здесь 500 строк - это не так много, если обернуть тегом
0
Заблокирован
04.03.2020, 20:30
Цитата Сообщение от vlisp Посмотреть сообщение
просто эта тема про коды, а не про картинки. создай гитхаб, выложи туда, дай ссылку здесь. в чем проблема. да даже здесь 500 строк - это не так много, если обернуть тегом
Я прикрепил файл.
Могу и обернуть. Мне не трудно, просто я думал, что это будет не очень уместно.

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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
(require '[clojure.string :as string])
 
(def flag 
  (atom 0)) 
(def flag-inside  
  (atom 0)) 
(def answer 
  (atom ""))
(def question 
  (atom ""))
(def hintFirst
  (atom ""))
(def hintSecond
  (atom ""))
(def hintThird
  (atom ""))
(def navigator
  (atom 1))
(def score
  (atom 0))
 
(defn PrintLogo []
 (println " __________________________________________________ ")
 (println "/___   | | |  | ||___  \\ |__   __| | ___  | | | / / ")
 (println " __ )  | | |__| |  __\\  \\   | |    | |  | | | |/ /  ")
 (println "(__  (   |  __  | / ___  \\  | |    | |  | | |   (   ")
 (println " ___)  | | |  | |( (___\\  \\ | |    | |__| | | |\\ \\  ")
 (println "\\______| |_|  |_| \\_______/ |_|    |______| |_| \\_\\ "))
 
 
 
 
;;;ИНИЦИАЛИЗАЦИЯ ПЕРЕМННОЙ PLAYERS
;;;******************************************************************************************************
(def players (read-string (slurp "/home/user/playersdb.txt")))
 
 
;;;ЧТЕНИЕ ВОПРОСОВ, ОТВЕТА И ПОДСКАЗОК ИЗ ФАЙЛА И ИНИЦИАЛИЗАЦИЯ СООТВЕТСТВУЮЩИХ АТОМОВ
;;;******************************************************************************************************
(defn ReadFile [file number]
  (with-open [reader (clojure.java.io/reader file)]  
    (doseq [init (line-seq reader)]
      (when (string/starts-with? number init)
        (doseq [line (take 6 (line-seq reader))]
          (cond
            (re-find  #"^Вопрос"       line) (reset! question line)
            (re-find  #"^Ответ"        line) (reset! answer  
                                                  (re-find #"[^Ответ: ].*" line))
            (re-find  #"^ПодсказкаРаз" line) (reset! hintFirst 
                                                  (re-find #"[^ПодсказкаРаз: ].*" line))
            (re-find  #"^ПодсказкаДва" line) (reset! hintSecond
                                                  (re-find #"[^ПодсказкаДва: ].*" line))
            (re-find  #"^ПодсказкаТри" line) (reset! hintThird 
                                                  (re-find #"[^ПодсказкаТри: ].*" line)))))))) 
;;;ФУНКЦИЯ УДАЛЕНИЕ ПРОБЕЛОВ
;;;*********************************************************************************************************
 
(defn RemoveSpace [string]
  (if (some #{\space} (seq string))
    (apply str (remove #{\space} (seq string)))
    string))
 
 
;;;ПОВЕРКА СОЗДАВАЕМОГО ПОРОЛЯ
;;;******************************************************************************************************
(defn TestPassword [keyname get-name]
 (print "Придумайте пароль: ")
 (flush)
 (let [get-password (read-line)]
   (cond
     (= get-password "выход") 
     "EXIT"
     (nil?
       (re-find #"[0-9]" 
                (str (re-matches #".*[a-z, A-Z].*" get-password))))
     (do
       (println "Пароль должен содержать буквы и цифры")
       (recur keyname get-name))
    (some #{\space} (seq get-password))
    (do
      (println "Пароль не должен сожержать пробелы")
      (recur keyname get-name))    
    (< (count get-password) 6)
    (do
      (println "Пароль должен быть не короче шести символов")
      (recur keyname get-name))
    :else 
    (do
      (spit "/home/lispo/playersdb.txt"
            (assoc players keyname (hash-map :name get-name :password (hash get-password) :navigator 1 :score 0 :hint 0)))
      (def nick get-name)      
      (println (format "%s, вы удачно зарегестрированы.", get-name))))))
 
 
;;;РЕГИСТРАЦИЯ ИГРОКА
;;;******************************************************************************************************
(defn RegPlayer []
 (print "Ваше имя для игры: ")
 (flush)
 (let [raw-name (read-line)
       get-name (RemoveSpace raw-name)
       keyname  (keyword get-name)]
   (cond 
     (= get-name "выход") 
     "EXIT"
     (and 
       (= "FREE" (keyname players "FREE"))
       (not (nil? (re-find #"^[a-z, A-z].*" get-name)))
       (>= (count get-name) 3)) 
       (TestPassword  keyname get-name)
     (not= "FREE" (keyname players "FREE"))
     (do 
       (println (format "Имя %s уже занято.", get-name))
       (recur))
     (nil? (re-find #"^[a-z, A-Z].*" get-name))
     (do
       (println "Имя должно начинаься с буквы.")
       (recur))
     (< (count get-name) 3)
     (do
       (println "Имя должно быть не короче трех символов.")
       (recur)))))
 
 
;;;ВНЕСЕНИЕ ИЗМЕНЕНИЙ В СТАТИСТИКУ ИГРОКА
;;;******************************************************************************************************
;;; Изменение данных игрока и запись их, в том числе при выходе из игры.
(defn ChangeData [nick navigator score flag flag-inside]
  (let [keyname     (keyword nick)
        players     (read-string (slurp "/home/lispo/playersdb.txt"))
        navigator   @navigator
        score       @score
        flag        @flag
        flag-inside @flag-inside
        password    ((comp :password  keyname) players)]
    (spit "/home/user/playersdb.txt"
          (assoc-in players [keyname] 
                    (hash-map :name nick :password password  :navigator navigator :score score :flag flag :hint flag-inside)))))
 
;;;Запись изменений при правильном ответе
(defn ChangeDataWhenAnswer [nick navigator score flag flag-inside]
  (cond
    (= 0 @flag-inside) 
    (do (swap! score + 8)
      (ChangeData nick navigator score flag flag-inside))
    (= 1 @flag-inside)
    (do (swap! score + 6)
      (ChangeData nick navigator score flag flag-inside))
    (= 2 @flag-inside)
    (do (swap! score + 4)
      (ChangeData nick navigator score flag flag-inside))
    (= 3 @flag-inside)
    (do (swap! score + 2)
      (ChangeData nick navigator score flag flag-inside))))                   
 
 
;;;ВХОДА В ИГРУ: ПРОВЕРКА ЛОГИНА И ПОРОЛЯ
;;;******************************************************************************************
(defn CheckLoginForEnter []
  (print "Логин: ")
  (flush)
  (let [raw-name (read-line)
        get-name (RemoveSpace raw-name)
        keyname  (keyword get-name)]
    (cond 
      (= get-name "выход")
      "EXIT"
      (not= "NOT_EXIST" (keyname players "NOT_EXIST")) 
      (def nick get-name)
      :default
      (do  
        (println "Неверный логин.")       
        (recur))))) 
 
(defn CheckPasswordForEnter  [nick]
  (print "Пароль: ")
  (flush)
  (let [console       (System/console)
        raw-password  (.readPassword console)
        password      (RemoveSpace (apply str raw-password))
        keyname       (keyword nick)]
    (cond 
      (= password "выход") 
      "EXIT"
      (= (hash password) ((comp :password keyname) players))
      (do 
        (println "Добро пожаловать," nick)
        (reset! navigator   ((comp :navigator keyname)  players))
        (reset! score       ((comp :score     keyname)  players))
        (reset! flag        ((comp :flag      keyname)  players))
        (reset! flag-inside ((comp :hint      keyname)  players)))
      :default 
      (do
        (println "Неверный пароль.")
        (recur nick)))))
                     
                       
(defn TestEnter []
  (if (= "EXIT" (CheckLoginForEnter))
    "EXIT"
    (CheckPasswordForEnter nick)))
 
 
;;;ПОЛУЧЕНИЕ СТАТИСТИКИ
;;;********************************************************************************************
;;;Stats  -- трансформация map players в vector, содержащий maps с основными данными играков.
(defn Stat [maps]
  (loop [maps maps
         target (vector)]
    (if (seq maps)
      (recur (into {} (rest maps)) (into target (vector (get-in (vec maps) [0 1]))))
      target)))
 
;;;StatsPrint -- вывод статистики на экран.
(defn StatPrint 
  ([]
    (let [prestat (Stat players)
          raw     (reverse (sort-by :score prestat))]
      (dotimes [iter (count raw)]
        (println iter"\b)"(:name (.get raw iter)) " баллы: " (:score (.get raw iter))))))
  ([number]
    (let [prestat (Stat players)
          raw     (reverse (sort-by :score prestat))]
      (dotimes [iter number]
        (println iter"\b)" (:name (.get raw iter)) " баллы: " (:score (.get raw iter)))))))
 
(defn PersonalStat []
  (let [prestat (Stat players)
        raw     (reverse (sort-by :score prestat))]
        (dotimes [iter (count players)]
          (when (= (:name (.get raw iter)) nick)
            (println iter"\b)" (:name (.get raw iter)) " баллы: " (:score (.get raw iter)))))))
 
 
 
;;;Получение статистики из меню.
(defn GetStatFromLauncher [players]
  (if (>= (count players) 10)
    (StatPrint 10)
    (StatPrint))
  (let [get-key (read-line)]
    (when-not get-key)))
 
 
;;;ВНУТРЕНИИЙ ЦИКЛ ДЛЯ ПОДСКАЗОК
;;;*************************************************************************************************
(defn HintLoop [inner-counter]
  (print "Введите да или нет: ")
  (flush)
  (let [gets (string/lower-case (read-line))]
    (cond    
      (= gets "да")
      (cond (= @inner-counter 0)
            (do
              (println (format "\n%s\n", @hintFirst))
              (swap! inner-counter inc))
            (= @inner-counter 1)
            (do
              (println (format "\n%s\n", @hintSecond))
              (swap! inner-counter inc))
            (= @inner-counter 2)
            (do
              (println (format "\n%s\n", @hintThird)) 
              (reset! inner-counter 0)))
            (= gets "нет")         
            (println)
            :default 
            (recur inner-counter))))
 
 
;;;ЦИКЛ ВЫХОДА
;;;*****************************************************************************************************
(defn ExitLoop [] 
  (print "Введите да или нет: ")
  (flush)
  (let [out (string/lower-case (read-line))]
    (cond (= out "да")  (do
                          (ChangeData nick navigator score flag flag-inside)
                          (println "До скорого")
                          (System/exit 0))
          (= out "нет") nil
          :default     (ExitLoop))))
 
 
;;;ОЧИСТКА ЭКРАНА
;;;*****************************************************************************************************
(defn ClearScreen []
  (flush)
  (println (str (char 27) "[2J"))
  (println (str (char 27) "[;H")))
 
 
;;;ПЕЧАТЬ ВОПРОСА НА ЭКРАН
;;;******************************************************************************************************
(defn AskQuestion [question] 
  (println (format "%S" @question)))
 
(defn AskQuestionEnter [question flag-inside] 
  (println (format "%S" @question))
  (cond
    (= 1 @flag-inside)
    (do
      (println "Вы до выходя взяли одну подсказку. Вот она.")
      (println  @hintFirst))
    (= 2 @flag-inside) 
    (do 
      (println "Вы до выхода взяли две подсказки. Вот они.")
      (println @hintFirst)
      (println @hintSecond))
    (= 3 @flag-inside)
    (do 
      (println "Вы до выхода взяли три подсказки. Вот они.")
      (println @hintFirst)
      (println @hintSecond)
      (println @hintThird))))
 
 
;;;ИГРА
;;;******************************************************************************************************
 
 
(defn RightAnswer []
    (println "Да, это" @answer"!")
    (reset! flag 0)
    (ChangeDataWhenAnswer nick navigator score flag flag-inside)
    (ReadFile "/home/user/donor.txt" (swap! navigator inc))
    (Thread/sleep 2000)
    (ClearScreen)
    (AskQuestion question))
 
(defn WrongAnswer []
  (swap! flag inc)
  (print "Подсказку?[да|нет]: ")
  (flush)             
  (let [getty (string/lower-case (read-line))]
    (cond
        (= getty "да") 
        (do 
          (swap! flag-inside inc)
          (cond
            (= @flag-inside 1)                  
            (println  @hintFirst)
            (= @flag-inside 2)
            (println  @hintSecond)
            (= @flag-inside 3)
            (do 
              (println @hintThird)          
              (reset!  flag-inside 0))))
        (= getty "нет")
        (do
          (print "Ваш ответ: ")
          (flush)
          (let [inner-getty (string/lower-case (read-line))]
            (if (not= inner-getty @answer)
                (do
                  (println "Неверно")
                  (reset! flag 0)
                  (ReadFile "/home/user/donor.txt" (swap! navigator inc))
                  (Thread/sleep 2000)
                  (ClearScreen)
                  (AskQuestion question))     
                (RightAnswer))))
      :else
      (HintLoop flag-inside))))
 
          
 
(defn QueryExit []
  (print "Выйти [Да|Нет]: ")
  (flush)
  (let [exit (string/lower-case (read-line))]
  (cond
    (= exit "нет")
    nil
    (= exit "да") 
    (do
      (ChangeData nick navigator score flag flag-inside)
      (println "До скорого")
      (System/exit 0))
    :default
    (ExitLoop))))
 
 
 
(defn Game []
 (print "Ваш ответ: ")
 (flush) 
 (let [gets (string/lower-case (read-line))]
   (cond 
       (> @flag 2)
       (do
       (println "Нет, это не " gets)  
       (reset! flag 0)
       (ReadFile "/home/user/donor.txt" (swap! navigator inc))
       (Thread/sleep 2000)
       (ClearScreen)
       (AskQuestion question)
       (Game))        
       (> (count gets) (+ (count @answer) 20))  
       (println "Слишком много букв!\n")   
       (= gets  "меню")
       (do
         (ChangeData nick navigator score flag flag-inside) 
         "EXIT")        
       (= gets "выход")
       (QueryExit)
       (= gets "стат")
       (do
        (PersonalStat)
        (Game)) 
       (not= gets (string/lower-case @answer))
       (do
         (println "Нет, это не" gets)
         (WrongAnswer)
         (Game))
       (= gets (string/lower-case @answer))
       (do
         (RightAnswer)
         (Game))
       :default nil)))       
     
;;;******************************************************************************************************
 
 
;;;МЕНЮ
;;;******************************************************************************************************
(defn Launcher [] 
  (println "1)Регистрация")
  (println "2)Вход")
  (println "3)Статистика")
  (println "4)Выход")
  (let [get-launcher (read-line)]
    (cond
          (= get-launcher "4") (println "До встречи")
          (= get-launcher "1") (if (not= "EXIT" (RegPlayer)) 
                               (do
                                 (ReadFile "/home/user/donor.txt" @navigator)
                                 (Thread/sleep 3000)
                                 (ClearScreen)
                                 (AskQuestion question)
                                 (when (= "EXIT" (Game)) 
                                   (ClearScreen)
                                   (PrintLogo)
                                   (recur)))
                               (do 
                                 (ClearScreen)
                                 (PrintLogo)
                                 (recur)))
          
          (= get-launcher "2") (if (not= "EXIT" (TestEnter)) 
                               (do 
                                 (ReadFile "/home/user/donor.txt" @navigator)
                                 (Thread/sleep 3000)
                                 (ClearScreen)
                                 (AskQuestionEnter question flag-inside)
                                 (when (= "EXIT" (Game))
                                   (ClearScreen)
                                   (PrintLogo)
                                   (recur)))
                              (do 
                                (ClearScreen)
                                (PrintLogo)
                                (recur)))
          
         
         (= get-launcher "3")  (do
                                 (GetStatFromLauncher players)
                                 (ClearScreen)
                                 (PrintLogo)
                                 (recur))
         
         
          :default (do 
                     (ClearScreen)
                     (PrintLogo)
                     (recur)))))
 
                                                      
;;;ЗАПУСК
;;;******************************************************************************************************
(ClearScreen)
(PrintLogo)
(Launcher)
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
04.03.2020, 23:38
Цитата Сообщение от sodda Посмотреть сообщение
500 строк тут запостить?
github существует. Почему всё в PascalCase?
0
Заблокирован
05.03.2020, 09:32
Цитата Сообщение от korvin_ Посмотреть сообщение
Почему всё в PascalCase?
Мне так удобно.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,769
Записей в блоге: 14
14.05.2020, 18:17
Давно хотел это написать... 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
42
43
44
45
(defun dw-main (expression)
   (let ((w (gensym 'w)))
      (grwCreate w 600 400 (output expression) _WHITE)
      (grwSetParm w 3 0 _WHITE)
      (grwFont w "Tahoma" 12 T Nil)
      (grwScale w -120 120 -120 120)
      (draw-expr expression w -90 80)
      (grwShow w)))
 
(defun arrow (w x1 y1 x2 y2)
  (if (<= (abs (- y1 y2)) 1.0e-8)
      (progn 
          (grwline w x1 y1 x2 y2 _RED)
          (grwline w x2 y2 (- x2 3) (+ y2 3) _RED)           
          (grwline w x2 y2 (- x2 3) (- y2 3) _RED))
      (progn 
          (grwline w x1 y1 x2 y2 _RED)
          (grwline w x2 y2 (- x2 3) (+ y2 3) _RED)           
          (grwline w x2 y2 (+ x2 3) (+ y2 3) _RED))))           
 
(defun draw-expr(e w x y)
  (cond ((atom e)
         (grwRect w (- x 10) (- y 20) (+ x 10) y _BLACK)
         (if e (grwPrint w x (- y 5) (output e) _BLACK)
               (progn (grwLine w (- x 10) (- y 20) (+ x 10) y _BLACK)
                      (grwLine w (- x 10) y (+ x 10) (- y 20) _BLACK))))
        ((listp (car e))
               (grwRect w (- x 10) (- y 20) (+ x 10) y _BLACK)
               (grwRect w (+ x 10) (- y 20) (+ x 30) y _BLACK)
               (arrow w x (- y 10) x (- y 38))
               (if (cdr e) (progn 
                                 (draw-expr (cdr e) w (+ x 50) y)
                                 (arrow w (+ x 20) (- y 10) (+ x 40) (- y 10)))
                          (progn (grwLine w (+ x 10) (- y 20) (+ x 30) y _BLACK)
                                 (grwLine w (+ x 10) y (+ x 30) (- y 20) _BLACK)))                          
               (draw-expr (car e) w x (- y 40)))
        (t (draw-expr (car e) w x y)
           (grwRect w (+ x 10) (- y 20) (+ x 30) y _BLACK)
           (if (cdr e) (progn (draw-expr (cdr e) w (+ x 50) y)
                              (arrow w (+ x 20) (- y 10) (+ x 40) (- y 10)))
                       (progn (grwLine w (+ x 10) (- y 20) (+ x 30) y _BLACK)
                              (grwLine w (+ x 10) y (+ x 30) (- y 20) _BLACK))))))
                              
(dw-main '(a (b c) d))
(dw-main '(a (b (c (d)))))
Преподавателям, которые заставляют своих студентов рисовать подобные картинки, посвящается...

Это, разумеется, набросок. Результат ковидной скуки. При по-настоящему сложных списках будут наложения.
Миниатюры
Полезные коды и авторские программы на Lisp   Полезные коды и авторские программы на Lisp  
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
15.05.2020, 21:25
Цитата Сообщение от Catstail Посмотреть сообщение
HomeLisp. Код, который "рисует" простые списки:
А зачем это нужно? А почему слово рисует в кавычках?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2020, 21:25

Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
Предлагаю в этой теме размещать ответы на часто задаваемые вопросы и просто делиться полезными кодами. Обращаю внимание на некоторые...

Программы на 1С и авторские права
На форуме много сильных программистов, полагаю, что кто-то пишет и отдельные программы. Интересует вот что: 1) можно ли в 1С 7.7...

Поменять авторские права в описании программы
Народ подскажите как поменять авторские права в описании программы, срочно надо. Пож-та

Авторские программы, библиотеки, надстройки и шаблоны
Коллектив модераторов раздела оставляет за собой право использовать данный пост аналитики для размещения и обновления оглавления темы. ...

Полезные программы для програмистов под VB
Предлагаю сюда скидывать все программы которые упрощают жизнь програмисту. Например: - Программа для генерации MsgBox в виде готовой...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru