Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lisp

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.83
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
#1

Lisp системы для новичков. - Lisp

07.02.2012, 23:17. Просмотров 7111. Ответов 53
Метки нет (Все метки)

вот, долго искал, читал статьи с ошибками, ругался. кажется нашёл то, с чего можно начинать. ссылка для тех кто испытывает трудности в установке более мощных систем, http://habrahabr.ru/blogs/lisp/83587/
, пока так вот, но это лучше чем ничего. если кто-то может прошу скидывать ссылки и информацию на простые и ,более функциональные системы, не отошедшие от начальной идеи и синтаксиса Lisp.

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

Добавлено через 3 часа 24 минуты
странно, не обнаруживал, хоть и читал, наверное снова невнимательно http://lisper.ru/pcl/lather-rinse-repeat-a-tour-of-the-repl#fnt__4 ставится Lisp in a Box, а вот с SBCL проблемы большие почему-то
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2012, 23:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Lisp системы для новичков. (Lisp):

организация циклов в Lisp (bee lisp demo) - Lisp
разбираюсь с простыми задачами, эти пока не знаю, как решать... помогите пожалуйста. 1. Слова в предложении разделены пробелами....

Lisp для новичка в ФП - Lisp
Всем привет, уважаемые форумчане. Прочитал очень много тем на форуме про Lisp и мне захотелось его изучить. Сам я пишу на Java и C#, с ФП...

Учебник по Lisp для начинающих - Lisp
Build Your Own Lisp. Learn C and build your own programming language in under 1000 lines of code: ...

Для чего нужен знак #' в Common Lisp? - Lisp
Кто подскажет для чего нужен знак #' в Common Lisp?

Программное обеспечение для Windows 7 под Lisp - Lisp
Подскажите, пожалуйста, программное обеспение для вин 7 для того, чтобы можно было открыть, отредактировать и снова отладить программу на...

переделайте пожалуйста задачи сделанные для lisp в xlisp - Lisp
переделайте пожалуйста задачи сделанные для lisp в xlisp. не понимаю этот язык программирования:( заранее спасибо :) 1) Для заданного...

53
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
23.02.2012, 14:55  [ТС] #16
а вы не могли бы привести операторы или функции для работы с атомами: разбить атом и собрать атом? ведь без этого всё не имеет смысла, мне давали какие-то костыли, но в вашей среде они не пошли. ваша среда привлекательна тем, что там хорошо расписана работа с файлами и каталогами, да и локализована она, а вот операций над атомами нету
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
23.02.2012, 20:58 #17
Есть операции над атомами! EXPLODE: http://catstail.narod.ru/homelisp/classic_funct.html#EXPLODE
(разбор атома на "буквы") и IMPLODE http://catstail.narod.ru/homelisp/classic_funct.html#IMPLODE
(сбор атома из букв). Все это реализовано в 13-м ядре. Пробуйте!
0
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
23.02.2012, 22:33  [ТС] #18
это не нужно,там нет действий над переменными, закрепить (или присвоить) за переменной атом и разбивать его и собирать указывая переменную, а не атом. иначе как я могу вообще скодить что либо? никак...или я не так понял, там аргумент же принимается как то? как я могу передать не константу, у вас там действия над константами описаны, а что за кодинг без переменных
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
23.02.2012, 23:03 #19
Хм... Присвоить атому (символу значение): (setq A 123). Теперь атом A будет иметь значение 123.
Строка - тоже атом. Есть строковые функции, позволяющие выделять подстроки, склеивать строки и т.д. Пример:
(setq s1 "Проба")
(setq s2 " пера")

(setq s3 (strCat s1 s2))

Значение s3 будет "Проба пера"... Это то?
0
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
23.02.2012, 23:44  [ТС] #20
да. но разве это пройдёт с этой функцией? разбивание и склеивание атома. я так посмотрел на строки листинга-примеры вызова, понял что не пройдёт.
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
23.02.2012, 23:56 #21
С какой "этой функцией"? Что вообще сделать-то нужно?
0
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
24.02.2012, 00:24  [ТС] #22
если символу то очевидно что пройдёт, а вот если s1, то очевидно не пройдёт, если s1 переменная

Добавлено через 12 минут
нужно или переменную, значение которой атом разбить, или склеить атом из переменных, значения каждой из которых-атом.
далее, ну я понял, что если символу значение присваивать, то атом может разбить и можно, ну наверное так же и склеивать. потом отменять значение псимвола. но это костыль конечно, а не прямой код, костыли хоть и юзабельны, но на скорость работы влияют. впринципе для меня на данном этапе это не существенно. значит можно применять символ, просто потом отменять его значение? впрочем, если что, можете не отвечать, я сам попробовать могу, вы и так подсказку дали, спс. утром попробую
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
24.02.2012, 08:02 #23
1) "переменную, значение которой атом разбить"

(setq v1 'ABCD) ;; у переменной v1 значение - атом ABCD
(setq v2 (explode v1)) ;; v2 будет равна списку (A B C D)

2)"склеить атом из переменных, значения каждой из которых-атом"

(setq V1 'ABC)
(setq V2 'DEF)

Две переменных, значения которых - атомы

(setq V3 (implode (append (explode V1) (explode V2))))

в результате V3 получит значение ABCDEF

Ну, а со строками все вообще просто. Как в Паскале...
0
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
24.02.2012, 13:05  [ТС] #24
спасибо, это уже совсем иначе представляется

Добавлено через 1 час 22 минуты
а у вас нет простеньких листингов программ от начала до конца? типа демо, ну можно и не очень простеньких, хотя бы без комментариев. без листингов непросто разобраться. куски кода-это не то, когда работаешь с опр. IDE или средой. любые листинги, для вашей среды. есть у вас отрывки кода, но это всё равно что судить о том, как может выглядеть конечный продукт по лоскутку материала. желательно не математических программ тоже.

Добавлено через 10 минут
хотя есть такое, сорри. но маловато . какую нибудь бы прогу типа калькулятора с графическим интоерфейсом, сохраняющего результаты работы в текстовый файл, было бы наглядно, думаю, вполне. всё таки лучший способ научится собрать-для начала разобрать. ну или любую другую, впринципе, просто ваши полные листинги не более 5 строк, мало, а те что больше-куски. извините, конечно, за навязчивость.
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
25.02.2012, 09:20 #25
Есть листинги. Вот программа, которая "гоняет" шарик по прямоугольному полю:
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
(grwCreate 'w 300 300 "Анимация" &HFFFFFF)
 
(grwShow 'w)
 
(grwScale 'w -105 105 -105 105)
 
(prog (x1 y1 x2 y2 vx vy k)
 
      (setq x1 0)
      (setq y1 0)
 
  @vx 
      (setq vx (rnd 1.3))
      (cond ((<= (abs vx) 1.0) (go @vx)))
 
  @vy
      (setq vy (rnd 1.3))
      (cond ((<= (abs vy) 1.0) (go @vy)))
 
      (grwSetParm  'w    // идентификатор окна
                   1     // ширина линий
                   0     // стиль заливки
                 _RED    // цвет заливки  
               _WHITE    // цвет переднего плана
       )
 
      (grwCircle 'w      // идентификатор окна
                 x1      // X центра
                 y1      // Y центра
                  5       // Радиус
                _RED    // цвет
       )
 
 Loop 
       
      (setq x2 (+ x1 (* vx 3)))
 
      (setq y2 (+ y1 (* vy 3)))
 
      (grwSetParm  'w    // идентификатор окна
                    1    // ширина линий
                    0    // стиль заливки
               _WHITE    // цвет заливки  
               _WHITE    // цвет переднего плана
       )
 
 
      (grwCircle 'w      // идентификатор окна
                 x1      // X центра
                 y1      // Y центра
                  5      // Радиус
             _WHITE      // цвет
      ) 
 
      (grwSetParm  'w    // идентификатор окна
                    1    // ширина линий
                    0    // стиль заливки
                 _RED    // цвет заливки  
               _WHITE    // цвет переднего плана
       )
 
 
      (grwCircle  'w     // идентификатор окна
                   x2    // X центра
                   y2    // Y центра
                    5    // Радиус
                 _RED    // цвет
      )
 
      (grwRefresh 'w 3)
 
      (setq k (grwInkey 'w))
 
      (cond ((eq k 27)  (return (list x1 y1 vx vy)))
            ((eq k 109) (prog nil (setq vx (* 0.75 vx)) (setq vy (* 0.75 vy)) ))
            ((eq k 107) (prog nil (setq vx (* 1.25 vx)) (setq vy (* 1.25 vy)) ))
            ((eq k 78)  (prog nil  
 
                         @vx 
                                  (setq vx (rnd 1.3))
                                  (cond ((<= (abs vx) 1.0) (go @vx)))
 
                         @vy
                                  (setq vy (rnd 1.3))
                                  (cond ((<= (abs vy) 1.0) (go @vy)))
 
                                  (grwCls 'w)
 
                                  (setq x2 0)
                                  (setq y2 0)
 
                        )
            )
      )             
       
      (cond ((greaterp x2 95) (setq vx (- 0 vx))))
 
      (cond ((greaterp y2 95) (setq vy (- 0 vy))))
 
      (cond ((lessp x2 -95) (setq vx (- 0 vx))))
 
      (cond ((lessp y2 -95) (setq vy (- 0 vy))))
      
      (setq x1 x2)
 
      (setq y1 y2) 
 
      (go Loop)
 
)
 
(gc)
 
(grwCls 'w)
 
(grwDestroy 'w)
0
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
25.02.2012, 09:58  [ТС] #26
опять кусок , не компилируется. пишет не задано стартовое выражение. это некультурно просить весь листинг, или ннекультурно его давать? да и видно что окончания нету. нету старта. такое ощущение, что кодеры построили свою субкультуру, ладно..., переживу и всё равно сделаю то, что мне нужно, всё равно получается, хоть и не в тех средах, где хотелось бы.
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
25.02.2012, 10:14 #27
1) Работаете ли Вы в HomeLisp?
2) Проверьте сначала, как это работает в IDE (сохраните в файл с расш. "lsp" и загрузите в IDE)
3) Если хотите сделать EXE, то возьмите вот это:
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
(defun Animate Nil
 
  (grwCreate 'w 300 300 "Animation" &HFFFFFF)
 
  (grwShow 'w)
 
  (grwScale 'w -105 105 -105 105)
 
  (prog (x1 y1 x2 y2 vx vy k p Clr n)
 
        (setq x1 0)
 
        (setq y1 0)
      
        (setq p  1.0) 
 
    @cl
        (setq n (rnd 4))
        (cond ((<= n 0) (go @cl)))
        (setq Clr (getel '(_RED _GREEN _BLUE _YELLOW) n))   
 
    @vx 
        (setq vx (* (rnd 10.0) p) )
        (cond ((<= (abs vx) 1.0) (go @vx)))
 
    @vy
        (setq vy (* (rnd 10.0) p) )
        (cond ((<= (abs vy) 1.0) (go @vy)))
 
        (grwSetParm  'w    // идентификатор окна
                     1     // ширина линий
                     0     // стиль заливки
                   Clr     // цвет заливки  
                 _WHITE    // цвет переднего плана
         )
 
        (grwCircle 'w      // идентификатор окна
                   x1      // X центра
                   y1      // Y центра
                    5      // Радиус
                  Clr      // цвет
         )
 
    Loop 
       
        (setq x2 (+ x1 (* vx 3)))
 
        (setq y2 (+ y1 (* vy 3)))
 
        (grwSetParm  'w    // идентификатор окна
                      1    // ширина линий
                      0    // стиль заливки
                 _WHITE    // цвет заливки  
                 _WHITE    // цвет переднего плана
         )
 
 
        (grwCircle 'w      // идентификатор окна
                   x1      // X центра
                   y1      // Y центра
                    5      // Радиус
               _WHITE      // цвет
        ) 
 
        (grwSetParm  'w    // идентификатор окна
                      1    // ширина линий
                      0    // стиль заливки
                    Clr    // цвет заливки  
                 _WHITE    // цвет переднего плана
        )
 
        (grwCircle  'w     // идентификатор окна
                     x2    // X центра
                     y2    // Y центра
                      5    // Радиус
                    Clr    // цвет
        )
 
        (grwRefresh 'w 10)
 
        (setq k (grwInkey 'w))
 
        (cond ((eq k 27)  (return (list x1 y1 vx vy)))
              ((eq k 109) (prog nil (setq p (* 0.75 p)) (setq vx (* p vx))  (setq vy (* p vy)) ))
              ((eq k 107) (prog nil (setq p (* 1.25 p)) (setq vx (* p vx))  (setq vy (* p vy)) ))
              ((eq k 78)  (prog nil  
 
                         @vx 
                                  (setq vx (* p (rnd 10.0)))
                                  (cond ((<= (abs vx) 1.0) (go @vx)))
 
                         @vy
                                  (setq vy (* p (rnd 10.0)))
                                  (cond ((<= (abs vy) 1.0) (go @vy)))
 
                         @cl
                                  (setq n (rnd 4))
                                  (cond ((<= n 0) (go @cl)))
                                  (setq Clr (getel '(_RED _GREEN _BLUE _SILVER) n))   
 
                                  (grwCls 'w)
 
                                  (setq x2 0)
                                  (setq y2 0)
 
                        )
            )
        )             
       
        (cond ((greaterp x2 95) (setq vx (- 0 vx))))
 
        (cond ((greaterp y2 95) (setq vy (- 0 vy))))
 
        (cond ((lessp x2 -95) (setq vx (- 0 vx))))
 
        (cond ((lessp y2 -95) (setq vy (- 0 vy))))
      
        (setq x1 x2)
 
        (setq y1 y2) 
 
        (go Loop)
 
  )
 
  (gc)
 
  (grwCls 'w)
 
  (grwDestroy 'w)
 
)
А в качестве стартового выражения при создании EXE укажите (Animate).
0
Hretgir
Нарушитель
265 / 79 / 2
Регистрация: 25.01.2012
Сообщений: 3,091
Записей в блоге: 24
25.02.2012, 16:18  [ТС] #28
да, в вашей IDE делаю: создаю екзефайл, запускаю, появляется окно программы, но оно вобщем ничего не делает-из него можно только выйти.

Добавлено через 5 часов 53 минуты
она не работает, просто окно, даже не развёрнутое: только кнопки меню и всё, с выходом, кнопка "выйти" работает.
0
Catstail
Модератор
23498 / 11606 / 1893
Регистрация: 12.02.2012
Сообщений: 18,945
25.02.2012, 19:18 #29
Ох... Вы бы заглянули в документацию (http://catstail.narod.ru/homelisp/exe.html). При создании EXE-файла по умолчанию создается экзешник с диспетчерской формой. Если щелкнуть по кнопке с изображением треугольника (Пуск), то запустится программа.

Если дисп. форма не нужна, то при создании экзешника уберите галочки "Создавать дисп. форму" и "Сообщить о завершении". Тогда программа запустится сразу.
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
25.02.2012, 19:33 #30
Что лучше для самого-самого начинающего - HomeLisp или BEE Lisp? А может, что-то третье? Самое главное для меня - это чтобы сразу после установки работало, плюс подробная русскоязычная справка, примеры, подсветка синтаксиса. Надёжность кода важнее скорости. Платность не пугает.
0
25.02.2012, 19:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 19:33
Привет! Вот еще темы с ответами:

Запуск одной lisp программы для нескольких dwg файлов - Lisp
Необходимо LISP-ский макрос выполнить для целого ряда *.dwg файлов, находящихся в одной папке. Из книги Полищука и Лоскутова (AutoLISP и...

Записать на языке Common Lisp форму для вывода списка значений функции y(x) - Lisp
Пожалуйста поиогите с задачей: Записать на языке Common Lisp форму для вывода списка значений функции y(x). При определении функции...

PC-Lisp v.3.00 - Lisp
Как загрузить файл (исходный код программы) в PC-lisp?

Lisp - Lisp
Объясните кусочек кода,как,что выполняется,можно в эквиваленте на c++ (defun app (x y) (cond ((endp x) y) (t (cons (car x) ...


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

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

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