Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32

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

25.01.2016, 23:16. Показов 7252. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2016, 23:16
Ответы с готовыми решениями:

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

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

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

61
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
26.01.2016, 09:39
Цитата Сообщение от _Ivana Посмотреть сообщение
F-expr
- т.е. простые функции с невычисляемыми аргументами в CL даже не включены. Я сгоряча в HomeLisp реализовал, но сам ни разу не пользовался.
2
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
26.01.2016, 12:44
CLOS? Циклы на все случаи жизни? Возможность создавать кроссплатформенное гуи?

Добавлено через 6 минут
Возможно, вызов функций и методов java или других языков?
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
26.01.2016, 13:17
Самое ценное в Лиспе, это, вероятно, макро. Именно они позволяют называть Лисп "программируемым языком программирования"
2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
26.01.2016, 17:48  [ТС]
Спасибо, интересные направления.

вызов функций и методов java или других языков?
- interpop с языком реализации и вызов (удобный) его функций и методов - это вещь интересная, я про нее думал но как-то упустил. Осталось придумать синтаксис, как дать понять интерпретатору что я от него хочу.

Про макросы вопрос отдельный. У меня нет опыта применения (тем более конкретно макросов) Common Lisp и других языков, поэтому я просто не могу сказать, насколько мои макросы шире или Уже по возможностям. Читал, что в Clojure макросы специально ограничили в чем-то, и создатель языка Рич Хики обосновал почему.

CLOS
- интересно, но пока не знаю, насколько оно шире замыканий, если ни насколько - то можно реализовать просто библиотекой при том же ядре.

Циклы на все случаи жизни
- это страшный макрос Loop что-ли? Не пользовался, неужели он так удобен, что стоит его делать? Вложенные циклы у меня можно реализовать несколькими способами и так.

Возможность создавать кроссплатформенное гуи?
- это наверное про то, что не только текстовый PERL, а вызывать спецпроцедуры создания окон и отрисовки в них чего надо... Имхо, тесно перекликается с interpop, у Catstail в Home Lisp есть такие плюшки, насколько я помню. Интересно, но повторюсь, все упирается в освоение мной концепции взаимодействия с языком нижнего уровня.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
26.01.2016, 19:22
Цитата Сообщение от _Ivana Посмотреть сообщение
это страшный макрос Loop что-ли?
- не только. Мне вот нравится iter (макро объемом примерно в 200К; в HomeLisp пришлось реализовать как специальную функцию, не обошлось без синтаксических "потерь")

Как выглядит работа с iter:

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
(iter (for i from 1 to 10) (collecting i))
 
==> (1 2 3 4 5 6 7 8 9 10)
 
(iter (for i from 10 to 1 by -1) (collecting i))
 
==> (10 9 8 7 6 5 4 3 2 1)
 
(iter (for i from 10 to 1 by -1) 
      (for j from 1 to 10) (collecting (list i j)))
 
==> ((10 1) (9 2) (8 3) (7 4) (6 5) (5 6) (4 7) (3 8) (2 9) (1 10))
 
(iter (for i from 1 to 20) (summing i))
 
==> 210
 
(iter (for i from 1 to 20) (multiplying i))
 
==> 2432902008176640000
 
(iter (for a in '(1 4 -6 7 8 12 5)) (maximizing a)) 
 
==> 12
 
(iter (for a in '(1 4 -6 7 8 12 5)) (minimizing a)) 
 
==> -6
Добавлено через 6 минут
Кстати, чтобы собрать значения переменной цикла в инвертированный список, не обязательно запускать обратный отсчет. Можно и так:

Lisp
1
2
3
4
5
6
7
(iter (for i from 1 to 10) (collecting i at start)) 
 
==> (10 9 8 7 6 5 4 3 2 1)
 
(iter (for i from 1 to 10) (collecting i at end)) 
 
==> (1 2 3 4 5 6 7 8 9 10)
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
26.01.2016, 20:36
Цитата Сообщение от Catstail Посмотреть сообщение
(iter (for i from 1 to 10) (collecting i at start))
так наглядней и короче
Lisp
1
(loop for n downfrom 10 to 0 collect n)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
26.01.2016, 20:43
transformator.t, при одном итераторе - да. А если их несколько, выходит "так на так"
0
 Аватар для Vaderkos
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
26.01.2016, 20:45
Catstail,
Цитата Сообщение от Catstail Посмотреть сообщение
(iter (for i from 1 to 10) (collecting i))
Какя разница будет между этими двумя вариантами?
Lisp
1
2
(loop for i upto 10 collecting i)
(loop for i upto 10 collect i)
Они все выдают один результат
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
26.01.2016, 20:48
Vaderkos, у меня - только collecting. В HomeLisp функция loop организует бесконечный цикл с выходом по return.
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
26.01.2016, 21:01
Цитата Сообщение от Catstail Посмотреть сообщение
выходит "так на так"
не совсем понял, почему, ну да ладно....

а оно умеет по хэш таблице?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
26.01.2016, 22:22  [ТС]
Не знаю, может transformator что и дельное написал (он у меня в игноре за хамство в личку и неадекватность), но приведенные примеры iter не впечатляют, простите. То же самое делается гораздо проще без макросов. Но возможно есть другие, более интересные примеры, когда все эти loop и iter имеют смысл. Иначе это просто сахарная пилюля для пришедших с императивных языков.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
27.01.2016, 09:41
Цитата Сообщение от transformator.t Посмотреть сообщение
а оно умеет по хэш таблице?
- пока нет (собираюсь), но по файлу и строке - умеет.

Добавлено через 3 минуты
_Ivana, я просто показал синтаксис. Мне он понравился - я воспользовался. Вас не впечатляет - Бога ради! Кстати, а что Вы имели в виду, когда написали "То же самое делается гораздо проще без макросов"? Без макросов "не интересно", ибо статично (зашито). Покажите, как реализовали циклы Вы.
1
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
27.01.2016, 09:43
Catstail, я имел ввиду iterate, не нашёл примеров по хэш
3
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
27.01.2016, 13:16  [ТС]
Catstail, хорошо, сейчас на работе, вечером попробую показать свои циклы и то тот же самый результат примеров без циклов как таковых.

ЗЫ первые успехи interpop-а уже есть - могу создать любой доступный существующий объект и вызвать его методы с параметрами. Сложность - найти нужный метод по типам параметров.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
27.01.2016, 15:14
Цитата Сообщение от transformator.t Посмотреть сообщение
а оно умеет по хэш таблице?
Ага:
Lisp
1
for (key value) in-hashtable table
А если бы не было, можно было бы написать: iterate расширяемый, в отличие от loop.

Добавлено через 1 минуту
Онтопик: в Common Lisp интересная работа с состояниями (conditions) и рестартами.
4
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
27.01.2016, 16:23
_Ivana, code as data, что вроде как не относится к Вашей реализации.
Цитата Сообщение от _Ivana Посмотреть сообщение
На Call-CC все засматриваюсь, но для начала надо понять что это вообще такое.
continuations
2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
28.01.2016, 01:15  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Покажите, как реализовали циклы Вы.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
;; мутабельность + не нужная особая форма, оставил для баловства
(def i 0) (while (< i 5) (print i " ") (set! i (+ 1 i)))
0 1 2 3 4 OK
;; мутабельность + функция
(def i 0) (defn f1 () (cond (< i 5) ((print i " ") (set! i (+ 1 i)) (f1)))) (f1)
0 1 2 3 4 OK
;; мутабельность + макрос
(def i 0) (defmacro m1 () (cond (< i 5) ((print i " ") (set! i (+ 1 i)) (m1)))) (m1)
0 1 2 3 4 OK
;; иммутабельность + функция
(defn f2 (i) (cond (< i 5) ((print i " ") (f2 (+ 1 i))))) (f2 0)
0 1 2 3 4 OK
;; иммутабельность + макрос
(defmacro m2 (i) (cond (< i 5) ((print i " ") (m2 (+ 1 i))))) (m2 0)
0 1 2 3 4 OK
А всевозможные свертки по списку я по-хаскельски сделал:
Lisp
1
2
3
4
5
6
(defn foldl (f a l)
    (cond (null? l) a
          (foldl f (f (car l) a) (cdr l)) ))
OK
foldl + 0 '(1 2 3 4 5)
15
castorsky, приведите пожалуйста простой пример, по которому можно однозначно определить, поддерживает ли язык концепцию code as data или нет - я проверю. А так - вычисляются списки, в процесе вычисления возвращаются списки - лист процессинг, одним словом.

Добавлено через 2 часа 39 минут
Vaderkos, вести с полей: 3 дополнительных особых формы - new, method и invoke - и я получаю все методы всех существующих в моем рантайме объектов, до которых могу дотянуться. Даже свинговые диалоговые менюшки открываются, надо только научиться передавать им значения родительского фрейма.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(def h-m (new "java.util.HashMap"))
OK
(def h-m-put (method h-m "put" "java.lang.Object" "java.lang.Object"))
OK
invoke h-m h-m-put 0 "abc"
OK
invoke h-m h-m-put 1 "def"
OK
h-m
{0=abc, 1=def}
(def h-m-get (method h-m "get" "java.lang.Object"))
OK
invoke h-m h-m-get 1
def
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.01.2016, 19:40
Цитата Сообщение от _Ivana Посмотреть сообщение
приведите пожалуйста простой пример
https://en.wikipedia.org/wiki/Homoiconicity

Не по теме:

imho, эти однострочники без отступов смотрятся читаются ужасно

2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
29.01.2016, 23:48  [ТС]
По-моему у меня гомоиконность во все поля:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(def exp0  (cons '* (cons 'sin 1.1) (cons 'cos 2.03) nil) )
OK
exp0
(* (sin 1.1) (cos 2.03))
eval exp0
-0.3950137734738094
list-ref 2 exp0
(cos 2.03)
def exp1 (mapa (lambda (x) (cond (eq? x 'cos) 'sin x)) exp0)
OK
exp1
(* (sin 1.1) (sin 2.03))
eval exp1
0.7988833941155963
def exp2 (read)
(* (sin 1.1) (sin 2.03))
OK
exp2
(* (sin 1.1) (sin 2.03))
eval exp2
0.7988833941155963
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2016, 23:48
Помогаю со студенческими работами здесь

Clojure Как пользоваться трассировкой в Лиспе
Пожалуйста, объясните, как пользоваться трассировкой в Лиспе. Приведите пример выполнения программы с трассировкой.

Clojure Как работает классическая сборка мусора в лиспе? Сколько памяти занимает cons-ячейка?
Как работает классическая сборка мусора в лиспе (прочитал в документации, что SBCL использует классическую сборку)? Как работает в данном...

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

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

Реализация циклов на Лиспе, Вложенные циклы на Лиспе
1)реализовать двумя способами (LET, LOOP, DO, DOTIMES) первая картинка 2)Согласно варианту вычислить выражение на основе цикла LOOP и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru