[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.29402 Reply
File: serial_experiments_lain-14377.jpg
Jpg, 405.57 KB, 1600×1200 - Click the image to expand
edit Find source with google Find source with iqdb
serial_experiments_lain-14377.jpg
Был удивлён, пролистав за десяток страниц, и не найдя здесь подобного трэда.
Решил начать учить язык богов. С чего начать - книги и мануалы, теория и практика (желательно на русском), в чём лучше писать (под винду и под никсы), советы, распространённые ошибки, всё сюда. Лисп-нить иди.
>> No.29403 Reply
File: 1360269558729.jpg
Jpg, 195.79 KB, 1365×2048 - Click the image to expand
edit Find source with google Find source with iqdb
1360269558729.jpg
>>29402
Совсем ньюфаг штоле? SICP и вперед. Подойдет любой интерпретарор
>> No.29404 Reply
>>29403
> Совсем ньюфаг штоле?
Типа того.
> SICP
Загуглил, лекции обязательны, или для первого знакомства и книги хватит?
А если мне нужен компилятор?
>> No.29405 Reply
>>29404
Ты прочитай две главы, а там и компилятор сам найдешь.
Книги достаточно для человека. который в силах освоить эту книгу.
платиновые ответы пр
>> No.29406 Reply
>>29405
> платиновые ответы пр
> пр
харкач там --->
>> No.29428 Reply
>>29403
> Подойдет любой интерпретарор
По-моему, не совсем так. Если не ошибаюсь, там использовались функции для работы со строками, которых не было в R*RS (но могу и путать).
>>29404
> Загуглил, лекции обязательны, или для первого знакомства и книги хватит?
Книга и так по лекциям же, а лекции - по книге.
>> No.29450 Reply
>>29428
> Книга и так по лекциям же, а лекции - по книге
А появились они из варпа.
Петросян.жпг
>> No.29460 Reply
File: игры-сталкер-песочница-266643.jpeg
Jpeg, 93.92 KB, 604×574 - Click the image to expand
edit Find source with google Find source with iqdb
игры-сталкер-песочница-266643.jpeg
>>29403
Есть соус этой няши. Хочу затвор передернуть на нее.
>> No.29468 Reply
>>29460
Есть рядом с пикчей кнопочка с буквой g.
http://ww.inboobs.net/erotic/snezhnaja_koroleva:1031.html
>> No.29485 Reply
File: iphone-30.jpg
Jpg, 31.41 KB, 422×506 - Click the image to expand
edit Find source with google Find source with iqdb
iphone-30.jpg
>>29468
спасибо, мужик.
>> No.29492 Reply
>>29402
Под LISP ты подразумеваешь common lisp?
> книги
onlisp, но он еще не до конца переведен
перевод pcl - http://lisper.ru/pcl/
> в чём лучше писать
emacs + slime
>> No.29503 Reply
О, лиспотред, я спрошу тогда.

Racket
Имеется ли возможность объявить в блоке let функцию без лямбды? Я вроде перестал в скобках путаться, но вот не получается. Приведу пример, как получается и как хотелось.

Как получается.
(define (fact n)
   (let( [ tail-fact (λ (n accum)
            (if (= n 1)
              accum
              (tail-fact (- n 1) (* n accum))))])
   (tail-fact n 1)))

Как хотелось бы:
(define (fact n)
   (let ([ (tail-fact n accum) (if (= n 1)
                 accum
                (tail-fact (- n 1) (* n accum)))])
   (tail-fact n 1)))
>> No.29504 Reply
>>29503
объяви макрос чтобы (yoba (id ...) body ...) заменялось на (id (lambda (...) body ...)
>> No.29574 Reply
File: 226764_210769788946495_3745522_n.jpg
Jpg, 67.94 KB, 478×720 - Click the image to expand
edit Find source with google Find source with iqdb
226764_210769788946495_3745522_n.jpg
>>29503
Ракет - это же схема? Попробуй это.
(let tail-fact (n accum) (if (= n 1) accum (tail-fact (- n 1) (* n accum))))
Если интересно именно массово в теле лета - делай свои макросы.
>> No.29575 Reply
>>29574
> Ракет — это же схема?
ракет это переделанная схемка.
>> No.29592 Reply
File: ygohh1uctay.jpg
Jpg, 52.30 KB, 604×568 - Click the image to expand
edit Find source with google Find source with iqdb
ygohh1uctay.jpg
И попробуй дефайн в дефайн вкладывать, в схемках может работать как локальный дефайн.
>> No.29605 Reply
>>29503>>29592
Так и работает, код стайл по рэкету говорит предпочитать локальный дефайн лету. Единственное, что ты на дефайне не сделаешь замыкание.
>> No.29607 Reply
>>29605
почему не сделаешь?
>> No.29609 Reply
>>29607
А как?
>> No.29610 Reply
>>29609
Как всегда - (define (yoba x) (define y x) y)
>> No.29611 Reply
>>29610
Я имею в виду типа такого:
`(define yoba-let
   (let ([n 0])
(lambda ()
  (set! n (add1 n))
  n)))`
Наивное переписывание дает
`(define yoba-def
   (begin
(define n 0)
(lambda ()
  (set! n (add1 n))
  n)))
define: not allowed in an expression context in: (define n 0)`
>> No.29618 Reply
>> No.29627 Reply
>>29618
хакир. Использовал лямбду вместо лет. Да, это отвечает условию, пусть и мудренно. Окей, буду помнить. Но вот так короче выглядит:
(define yoba-def2
   (let ()
(define n 0)
(lambda ()
  (set! n (+ 1 n))
  n)))
>> No.29648 Reply
File: tumblr_lisp1bajuC1qh22huo1_500.jpg
Jpg, 57.99 KB, 500×545 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_lisp1bajuC1qh22huo1_500.jpg
Спрошу тут. Есть ли какой-нибудь стандартный макрос with для схемы/ракеты типа
`
(struct MyStruct (yoba))

(define x (MyStruct "eto ti?"))

(with MyStruct x
   (display yoba))
`
?
>> No.29649 Reply
>>29648
пиши MyStruct-yoba x и не выпендривайся
>> No.29651 Reply
>>29649
не лисп вей
>> No.29652 Reply
>>29651
лол, эт почему ещё?
>> No.29653 Reply
>>29652
Лисп вей - это написать макрос для себя, как только захотелось.
В принципе, то чего я прошу - это тоже не лисп вей, т.к. я хочу стандартного (иф поссибль) решения. Но придется писать самому. Потренируюсь заодно.
>> No.29654 Reply
>>29653
Чем тебе MyStruct-yoba x не стандартное решение?
>> No.29658 Reply
>>29654
стандартное, но многословное
>> No.29659 Reply
File: DSC_9279.jpg
Jpg, 37.23 KB, 595×397 - Click the image to expand
edit Find source with google Find source with iqdb
DSC_9279.jpg
>>29648
Это невозможно. Для common lisp/elisp существует progv и set. В схемке/кложуре их нет.
Суть такая: названия переменных не должны влиять на код программы. Если переименовать одну переменную во всех местах, то ничего не должно поменяться.

(with MyStruct x (display yoba)) -- тут йоба биндится, как временная переменная, но если поменять майстракт, то поменяется йоба, поменяется код. Недетерменистичность зашкаливает.

К слову, это ведь не так уж и нужно. Чтобы в clojure достать из мапа значение по ключу, нужно написать (:yoba x), либо (get x :yoba).
>> No.29660 Reply
>>29659
Зачем мне менять майстракт внутри with? Я же не долбоеб вроде. Я хочу что-то вроде common lisp-ового with-slots а не progv. Насчет кложурового способа, для схемы тоже нужно писать макрос, который объвляет структуры и переименовывает аксессоры.
>> No.29662 Reply
>>29658
> стандартное, но многословное
тогда тебе стоит попробовать ситму http://sym.at.ua/load/symta_v0_2/1-1-0-2
>> No.29665 Reply
>>29662
Нет, спасибо.
>> No.29668 Reply
File: 136249710245385.jpg
Jpg, 27.08 KB, 324×480 - Click the image to expand
edit Find source with google Find source with iqdb
136249710245385.jpg
>>29660
Не внутри with.
Смотри, ты хочешь именно создать временные переменные, не обьявляя их напрямую. Откуда взялась yoba? Если взять другой стракт, там не будет йобы.
Ты можешь сделать аналог кложуровского doto или ->.
> (-> x :yoba) экспандится в (:yoba x)
"eto ti?"
> (-> x (print :yoba)) экспандится в (print x :yoba)
~~~совсем не то, что хотели~~~
> для схемы тоже нужно писать макрос
Не особо понимаю, почему тоже. Лично я на кложуре страктами вообще не страдаю: они не нужны, когда есть мапы. Тем более, что реализованы стракты через мапы, либо хуже(но больше жава-взаимодействия).
>> No.29670 Reply
File: 136249864718359.jpg
Jpg, 26.50 KB, 323×479 - Click the image to expand
edit Find source with google Find source with iqdb
136249864718359.jpg
>>29660
> with-slots
А это реально.
Что-то такое, например. Не проверял на работоспособность.
(defmacro with-sluts (sluts party &rest NICE-BODY)
   `(let ,(map (lambda(slut) (list slut (string->symbol (append (symbol->string party) "-" (symbol->string slut))))) sluts)
   ,@NICE-BODY))
>> No.29672 Reply
>>29668
я же указываю прямо название структуры (with MyStruct x), соответственно могу (наверное) узнать названия полей MyStruct, т.е. получить список (list MyStruct-yoba и т.д.) и для каждого из них сделать let ((yoba Mystruct-yoba) и т.д)
> тоже
имелось ввиду, что в схеме придется писать макрос, а with - тоже макрос, т.е. в схеме в любом случае придется писать макрос.

Очень многие библиотеки (например, better-monads) определяют структуры и к ним макросы with- (например, with-monad), идея состоит в том, чтобы написать один макрос with, и явно указывать с каким типом структур мы работаем.
>> No.29676 Reply
File: 2013-03-06-01.06.23.jpg
Jpg, 435.60 KB, 2048×1536 - Click the image to expand
edit Find source with google Find source with iqdb
2013-03-06-01.06.23.jpg
>>29402

Тред полон ньюфагов. Пик строго релейтед.
>> No.29677 Reply
File: 136251953147532.jpg
Jpg, 31.92 KB, 320×479 - Click the image to expand
edit Find source with google Find source with iqdb
136251953147532.jpg
>>29672
> соответственно могу (наверное) узнать названия полей MyStruct
Wrong. В переменной макроса лежит имя переменной, по которой доступен стракт, а не сам стракт. Можешь сделать eval, но вероятность соснуть просто грандиозна. Макросы раскрываются при компиляции, а не во время выполнения. Потому я такие штуки в elisp крутил кекеке.
Ты мог бы не евалить, а просто подставить переменную в нужное место(как это и нужно делать в макросах). Но в let тебе подставлять некуда. (let <вот-тут-ничего-не-евалится> body)
В прогв можно, так как там евалится. Но прогва(и set) нет в схеме именно по той причине, которую я описал. И которую в SICP в первом разделе описали. Изменение названий переменных где-угодно в программе не должно влиять на результат. Изменение yoba на yoba1 повлияет на результат. Это плохая практика, хоть именно так почему-то и хочется сделать. Но реально нужно взять и не полениться писать те вещи, которые мы хотим. А хотим (get struct value &optional value-if-no-value-in-struct).
> in which the appropriate values, bind, plus, zero, return, and current-monad are bound to the values specified in monad.
Забили все имена ручками в let?
>> No.29686 Reply
File: Siouxsie+1982.jpg
Jpg, 44.55 KB, 347×428 - Click the image to expand
edit Find source with google Find source with iqdb
Siouxsie+1982.jpg
Каких-то старых готок ты постишь, лишпофаг. Помоложе нету?
>> No.29700 Reply
>>29677
Я сделал по-другому, определил макрос (struct/with struct-name fields) который определяет структуру и макрос (with-name x body).
http://paste.lisp.org/display/135858
Если кто знает, как сделать читабельнее, жду советов ИТТ.
>> No.29706 Reply
File: 364b81ddf308.jpg
Jpg, 52.03 KB, 418×640 - Click the image to expand
edit Find source with google Find source with iqdb
364b81ddf308.jpg
>>29686
> Помоложе нету?
> Siouxsie+1982.jpg
Да и Ману пощу же. Он няша.
> как сделать читабельнее
(setq lisp-indent-offset standard-indent)
Рикомендую. Любой оффсет = статический оффсет.
>> No.31133 Reply
File: dis.png
Png, 77.48 KB, 184×206 - Click the image to expand
edit Find source with google Find source with iqdb
dis.png
Куда-то тредик уплыл.
Дело вот в чем - листал я листинги программ на clojure, и там заметил такие вещи: при помощи swap! меняются значения Атомов. Т.е. получаются такие себе переменные. Разве это ФП?
В смысле, объект имеет постоянное состояние, с которым что-то делают. Разве такое состояние должно быть? (навеяно http://habrahabr.ru/post/161885/, http://jng.imagine27.com/index.php/2009-09-12-122605_pong_in_clojure.html)
понимаю, что пост получился сумбурный, но я пока в этом плохо ориентируюсь
>> No.31152 Reply
File: brodom1g-vm.jpg
Jpg, 48.26 KB, 480×480 - Click the image to expand
edit Find source with google Find source with iqdb
brodom1g-vm.jpg
>>31133
Это не ФП. Иммутабельность кложура распространяется на все переменные(в т.ч., переменные, хранящие атомы, рефы, так как доступ идёт через deref). Atoms, refs, agents - эти все штуки умеют изменяться.
Зачем они нужны?
Многопоточность. Агенты многопоточны by design. Атомы нужны, когда другие треды не будут изменять значения атома(только смотреть). Рефы нужны, если другие треды желают изменять значения(потому все изменения синхронизируются).
Да, атомы можно использовать, как мутабельные переменные, и писать императивно. Не вижу в этом особого смысла, правда, учитывая богатство хай-ордер функций, ленивостей, функций над коллекциями. http://clojure.org/cheatsheet
>> No.31153 Reply
File: 1132359668_WishYouWereHere.jpg
Jpg, 38.71 KB, 500×481 - Click the image to expand
edit Find source with google Find source with iqdb
1132359668_WishYouWereHere.jpg
>>31152
А как тогда, допустим, организовать этот понг правильно? Вчера ломал голову функциями от времени, но голова сломалась, а решения так и не нашел.

Даже не понг, а вот, к примеру тетрис. Фигура имеет координаты, которые меняются в зависимости от пользователя.

Как это организовать?

Или это того не стоит, и данная часть и должна быть императивной?
>> No.31154 Reply
File: pwfnshiftgq.jpg
Jpg, 38.18 KB, 500×356 - Click the image to expand
edit Find source with google Find source with iqdb
pwfnshiftgq.jpg
>>31153
Можно как-то так, например:
http://www.everfall.com/paste/id.php?z0qzfyg4nzo2
>> No.31155 Reply
>>31154
И правда, после просмотра я понял что что-то подобное как-раз и крутилось на уме.
Но все таки, тот пример понга, что я привел, получается он плохой?
>> No.31156 Reply
File: j1kt_hxpers.jpg
Jpg, 75.73 KB, 500×505 - Click the image to expand
edit Find source with google Find source with iqdb
j1kt_hxpers.jpg
>>31155
Он 2009 года (кложур достаточно новый язык всё-таки). Я не могу ничего сказать плохого про человека, который умеет наимпортить библиотек из жавы, и прямо из кложура ими орудовать. Но как по мне, это очень не лиспово и слишком лоулевельно. Это как ебать байты в ООП-языках. Для лисповости, пилят интерфейсы над жава-библиотеками, скрывая весь хоррор. Хороший пример - няшный seesaw, который сделаный из ужасного swing'a.
https://github.com/daveray/seesaw
https://gist.github.com/daveray/1441520
>> No.31157 Reply
File: 1132359668_WishYouWereHere.jpg
Jpg, 38.71 KB, 500×481 - Click the image to expand
edit Find source with google Find source with iqdb
1132359668_WishYouWereHere.jpg
>>31156
Но я спрашивал совсем не об этом, а о том, что там с помощью atom и swap! делаются как бы переменные.
>> No.31158 Reply
>>31157 -> >>31152
> Это не ФП.
>> No.31168 Reply
File: dv-vvjaogeq.jpg
Jpg, 49.95 KB, 500×494 - Click the image to expand
edit Find source with google Find source with iqdb
dv-vvjaogeq.jpg
>>31157
И как-бы да. Переменные внутри жава-классов тоже не иммутабельные. Можно даже мутабельный класс прямо внутри кложур создать. Потому я и вспомнил о его прямом использовании жава классов: присмотрись, там мутабельные присвоения евриве.
>> No.33100 Reply
Нашёл время, решил заняться, начал scip, и застопроился в самом начале - emacs, в котором и собирался практиковаться, отказывается исполнять один из первых же примеров из книги.

На
(define size 2)
size
вместо предпологаемой двоечки выдаёт окно с ошибками:
Debugger entered--Lisp error: (void-variable size)
  eval(size)
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp nil nil)
Щито за дела? Чяднт?
Сейчас на mint 15.
>> No.33105 Reply
>>33100
Схема и емакс лисп - разные языки. ruwiki://Emacs_Lisp
Если хочешь писать на схеме именно в емаксе, то тебе нужен соответствующий режим.
Но проще, я думаю, будет воспользоваться dr racket.
>> No.33106 Reply
>>33105
Настолько разные, что последний даже не может в define?
Во всяком случае, я пишу в файле .scm, там автоматически режим схемы должен включаться же, и вроде и включается - [(Scheme)] в строке состояния (или как там она называется) у меня написано. Я всё ещё не могу понять в чём проблема.
>> No.33107 Reply
>>33106
А код ты исполняешь как?
>> No.33108 Reply
>>33106
Да, в CL нужно defvar и defun
>> No.33110 Reply
>>33106
Ты eval-region используешь что ли?
Нужно scheme-send-region (C-c C-r) или scheme-send-definition (C-c C-e), например
>> No.33111 Reply
>>33107
C-x C-e
>>33110
> scheme-send-region (C-c C-r) или scheme-send-definition (C-c C-e)
Это включение режима или интерпритация?
Я с имаксом раньше не работал, только для лиспа его и поставил, и вообще в никсах не очень.
>> No.33112 Reply
>>33111
> Это включение режима или интерпритация?
Интерпретация. Только это в quack. scheme-mode, который из коробки, не умеет.
Можешь с помощью M-x package-install его поставить
>> No.33115 Reply
>>33112
> M-x package-install
Не работает.
А почему из коробки не может, что именно ему не нравится?
>> No.33116 Reply
>>33115
Из коробки там ЕМНИП только подсветка синтаксиса
>> No.33119 Reply
>>33106
> Настолько разные, что последний даже не может в define?
Там defun же
>> No.33120 Reply
>>33112
Так как его установить-то?
>>33119
Это для описания функций же, define для присвоения значений переменным, не?
>> No.33122 Reply
>>33120
> Так как его установить-то?
http://alexott.net/ru/writings/emacs-devenv/EmacsScheme.html#sec5
> Это для описания функций же, define для присвоения значений переменным, не?
Ты про диалекты лиспа знаешь?
>> No.33123 Reply
>>33119
В его случае defvar/defparameter/defconst
>> No.33124 Reply
>>33122
Читал, ничего не понял - куда копировать quack.el "чтобы имакс смог его найти", (пихал в ~/.emacs.d) где писать (require 'quack) (пробовал написать в самом имаксе и C-x C-e - выводит окно с ошибками), гуглил как устанавливать пакеты в имакс вообще, и этот в частности, но ни черта не нашёл. Стал бы я сюда писать не попробовав найти всё самому?
> Ты про диалекты лиспа знаешь?
В общих чертах.
>> No.33127 Reply
>>33124
Я закинул quack.el в ~/.emacs.d
и в .emacs написал
(add-to-list 'load-path "~/.emacs.d")
(require 'quack)
далее открываешь имакс M-x run-scheme
>> No.33131 Reply
>>33127
> .emacs
Где это?
>> No.33134 Reply
>>33133
> M-x package-list-packages
[No match] Where is your PROFIT now?
>> No.33135 Reply
>>33127
> далее открываешь имакс M-x run-scheme
> No process current buffer. Set scheme-buffer' or execute run-scheme'
>> No.33142 Reply
>>33135
Открой список буфферов в имаксе
>> No.33144 Reply
>> No.33146 Reply
File: KeineIN.png
Png, 178.49 KB, 256×512 - Click the image to expand
edit Find source with google Find source with iqdb
KeineIN.png
>>33120
> define для присвоения значений переменным, не?
Буууум.
Дефайн для создания переменных. Переприсваивать с дефайна - не правильно. Правильно с помощью set! в схемках, setq(или setf, или set) в elisp.
defvar
defconst
defun
Ну и let, конечно же.

>>33131
user-emacs-directory переменная (через C-h v), либо C-x C-f и зайди в ~/

>>33134
Установи package. http://www.emacswiki.org/emacs/ELPA

>>33135
Это странно, оно говорит, чтобы ты запустил схемку. Как будто одна не запустилась. У тебя в консольке scheme запускает схему? Если нет, поменяй значение переменной scheme-program-name.

Мимопроходил
>> No.33147 Reply
>>33146
> Буууум.
Я бы знал мат часть лучше, если бы у меня был доступ к её изучению, но я по прежнему не могу запустить интерпретатор.
> либо C-x C-f и зайди в ~/
Да, я уже нагуглил, что он должна быть в домашнем каталоге пользователя, так как у меня его не было, я его создал, и прописал там >>33127 я всё правильно сделал?
> Установи package.
Мне бы хоть с этим для начала закончить.
> У тебя в консольке scheme запускает схему?
Не пони, в какой именно консольке? Проверить Scheme в терминале?

Первый раз после запуска run-scheme выводит Run Scheme (default "mzscheme"): и требует что-то ввести, но я не понимаю что, а уже при последующих, если просто ткнуть ввод, происходит >>33135
>> No.33148 Reply
>>33146
> Установи package.
А еще лучше обновить емакс.
>> No.33150 Reply
>>33148
А еще лучше поставить drracket и не заморачиваться пока с емаксом.
>> No.33151 Reply
>>33148
Обновлён.
>>33150
Поставил, полёт нормальный.
> пока
Но я всё ещё жду помощи с настройкой имакса.
>> No.33152 Reply
>>33151
> Обновлён
package.el с 24й версии из коробки.
У тебя, по-видимому, 23я
Тогда последуй совету этого анона >>33127
>>33131
> Где это?
~/.emacs
>> No.33153 Reply
>>33152
> У тебя, по-видимому, 23я
Именно так-с.
-> >>33135>>33147
>> No.33158 Reply
>>33153
> Первый раз после запуска run-scheme выводит Run Scheme (default "mzscheme"): и требует что-то ввести, но я не понимаю что, а уже при последующих, если просто ткнуть ввод, происходит >>33135
Так mzscheme ты пробовал запустить или нет?
>> No.33160 Reply
>>33158
> Run Scheme (default "mzscheme"): и требует что-то ввести, но я не понимаю что
Просто нажми enter и откроется буффер с repl
>> No.33161 Reply
>>33158
Что это, и как это работает?
>>33160
-> >>33147
> Первый раз после запуска run-scheme выводит Run Scheme (default "mzscheme"): и требует что-то ввести, но я не понимаю что, а уже при последующих, если просто ткнуть ввод, происходит >>33135
>> No.33162 Reply
>>33161
mzscheme - интерпретатор.
Он у тебя в терминале-то хоть запускается?
>> No.33163 Reply
>>33162
Забил в терминал, пишет - мзским не уствновлен, установите рэкет by sudo apt-get install racket.
Рэкет в котором развлекаюсь сейчас устанавливал запустив скачанный с офф сайта скрипт для Убунты. И кажется я запихнул егго в домашний каталог.
>> No.33164 Reply
>>33163
Зачем тебе пердолить имакс? У тебя есть же есть дрракет, что еще нужно?
>> No.33166 Reply
>>33164
> Зачем тебе пердолить имакс?
Потому что могу?
>> No.33168 Reply
File: 60996270_Social.jpg
Jpg, 13.60 KB, 567×286 - Click the image to expand
edit Find source with google Find source with iqdb
60996270_Social.jpg
>>33166
Имакс заменяет "lambda" на λ
>> No.33183 Reply
File: 12921487196616.jpg
Jpg, 13.60 KB, 228×251 - Click the image to expand
edit Find source with google Find source with iqdb
12921487196616.jpg
>>33163
C-u M-x run-scheme
Тебе предложат выбрать схемку. Эта схемка должна нормально запускаться из терминала(она-же консолька >>33146), предлагая консольный repl(read eval print loop, цикл чтения-вывода).

В буфферах с scheme-mode можно будет делать C-x C-e, отправляющий sexp после курсора в буффер с реплом. C-x C-r - выделенный регион, C-M-x - окружающий sexp.
>> No.36567 Reply
Доброкодер, помоги. Не пойму на что slime при запуске ругается.
Алсо, почему из emacs буфер не работает через хоткеи? Только когда в меню копировать выбираешь.

(progn (load "/usr/share/common-lisp/source/slime/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.7055"))

This is SBCL 1.1.1.0.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
*
debugger invoked on a SB-INT:SIMPLE-FILE-ERROR in thread
#<THREAD "main thread" RUNNING {10029C0D23}>:
   Couldn't load "/usr/share/common-lisp/source/slime/swank-loader.lisp": file
   does not exist.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
   0: [ABORT] Exit debugger, returning to top level.

(LOAD
   "/usr/share/common-lisp/source/slime/swank-loader.lisp"
   :VERBOSE
   T
   :PRINT
   NIL
   :IF-DOES-NOT-EXIST
   T
   :EXTERNAL-FORMAT
   :DEFAULT)
0]
>> No.36569 Reply
>>36567
sbcl из консольки-то запускается? Если да, то возможно нужна какая-то либа со стороны sbcl, потому что он пишет, что он запускается и не находит "/usr/share/common-lisp/source/slime/swank-loader.lisp"
И чем вас только на КоммонЛисп тянет. Ставь clojure и пиши функционально и круто. Либы под него буквально на моих глазах развивались за последние пару лет.
>> No.36570 Reply
>>36569
> sbcl из консольки-то запускается?
Запускается. Все либы вроде есть. Но насчёт установки emacs и slime из реп меня гложат сомнения.
> И чем вас только на КоммонЛисп тянет
ХОТЕТ
>> No.36571 Reply
Странно. Пришлось поставить slime из реп и из сорцов, только так работает. Какие то косяки с путями. А вот копировать код из emacs принципиально не хочет, где настраиваются хоткеи?
>> No.36572 Reply
>>36571
Я сейчас без слайма живу, но попробуй так:
Поставь курсор после закрытой скобки. Нажми C-x C-e. Или C-c C-e. Что-то из этого должно работать.
Ну или пробуй M-x slime-что-то-там-похожее-на-евал
> Странно. Пришлось поставить slime из реп и из сорцов, только так работает. Какие то косяки с путями.
Классика CL. Когда начнешь ставить другие либы - будет только хуже.
Мои первые впечатления от clojure после CL были такими: я ставлю, и оно, ВНЕЗАПНО, работает! А с leiningen'ом вообще все просто заебись, просто строчку одну пишешь в project.clj с названием либы и ее версией, и оно скачивает.
> ХОТЕТ
Просто ты понимаешь, что сейчас есть вещи не хуже(тоже лисп, блджад), но современнее? Там всякие ленивые списки искаробки, генерализированные коллекции, и прочие ништяки. В коммоне у тебя даже нормальных потоков не будет, потому что они не прописаны в стандарте и в каждом трансляторе лиспа свои. В кложуре у тебя будут треды, future/deref, система транзакций, promise/deliver. Ну лично я не вижу ни одной здравой причины до сих пор считать CL стандартным лиспом, когда есть настолько хорошая альтернатива.
>> No.36573 Reply
File: 137701119673700.jpg
Jpg, 41.66 KB, 720×480 - Click the image to expand
edit Find source with google Find source with iqdb
137701119673700.jpg
>>36572
> Просто ты понимаешь, что сейчас есть вещи не хуже(тоже лисп, блджад), но современнее?
Понимаю. Просто я хочу попробовать Common Lisp. Я не собираюсь профессионально что-то писать на нём. Хотя кто знает, как получится. Просто ХОТЕТ.
>> No.36620 Reply
Борщ, лиспач. Такой простой вопрос — как в CL работать с http? Например получить главную Доброчана. Гугл посылает на ЛОР, где анонимус невнятно вещает что в стандартной библиотеке нету ничего подобного.
>> No.36621 Reply
File: 137692122308185.jpg
Jpg, 18.82 KB, 426×350 - Click the image to expand
edit Find source with google Find source with iqdb
137692122308185.jpg
>>36620
Да, в стандартной библиотеке этого нет. Может это подойдёт. http://www.cliki.net/cl-html-parse
>> No.36622 Reply
>>36620
enwiki://CL-HTTP

Неправильный у тебя гугл. Вот только всякие парсилки и работы с текстом в elisp удобнее.
>> No.36623 Reply
File: 1389207136865.jpg
Jpg, 51.21 KB, 800×669 - Click the image to expand
edit Find source with google Find source with iqdb
1389207136865.jpg
>>36621
>>36622
Спасибо, братюни.
>> No.36624 Reply
File: Снимок-экрана-12.01.2014-13:16:57.png
Png, 33.40 KB, 1021×319 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок-экрана-12.01.2014-13:16:57.png
Нагуглил еще cl-mechanize, спасибо еще раз.
>> No.36647 Reply
File: GF.jpg
Jpg, 226.69 KB, 1252×636 - Click the image to expand
edit Find source with google Find source with iqdb
GF.jpg
Доброанон, объясни ньюфагу что такое лямбда и зачем она нужна.

к:рукой печальной
>> No.36649 Reply
>>36647
Представь, что ты обьявляешь функцию "foo". По имени "foo" будет лежать НЕЧТО, что принимает аргументы, делает обсчеты, выдает результат. Даже если убрать имя, то это вполне логическая сущность. Так вот лямбда - это обьявление функции без имени. Эту функцию можно присобачить к имени, или передать, или запустить прямо на месте. Т.е., (defn foo [arg] (+ 1 arg)) тоже самое, что и (def foo (fn [arg] (+ 1 arg))).
Для чего нужно? Ну вот например есть функция, которая принимает функцию. Допустим, коллбек для другого треда, запускающийся после какого-то события, не принимающий аргументов и ничего не возвращающий. Вместо того, чтобы писать функцию на один случай, ты делаешь (fn-that-use-callback (fn [] some-actions)). Ну или вот есть список чисел, нужно получить список квадратов этих чисел. (map (fn[item] (* item item)) [1 2 3 4]) вернет [1 4 9 16].
Можно использовать лямбду для того, чтобы создавать локальные переменные. ((fn [local-var another-var] (* local-var another-var)) 3 4). Но для этого в лиспах есть let. т.е.: (let [local-var 3 another-var 4] (* local-var another-var)).
Можно использовать лямбду для того, чтобы сделать связывание локальной переменной. (def closure-fn (let [var 5] (fn [] var))). (closure-fn) вернет 5, как значение var, а само var по этому имени тут не доступно. Инкапсуляция, desu~.

Ну, это конечно если ты про лямбды в программировании. Есть еще лямбда-исчисление, которое придумали в тех-же годах, как и машину Тюринга, и с тем-же предназначением. Там все сложнее, и к практическому программированию оно не относится.
>> No.36653 Reply
>>36649
Не совсем то, что просил, но спасибо.
>> No.36655 Reply
>>36647
Кратко перескажу >>36649: лямбда является синтаксическим сахаром для кратких функций; можно передавать её в функции, которым нужны коллбеки. Например, так:
#!/usr/bin/python3

somefun(666, lambda: pass, 777)
somefunr(666, lambda: return, 777)
iamnotavariable = lambda z: z**z    # z is a parameter
iamnotavariable(3)    # 27
>>36649
Я ненавижу читать мануалы, написанные подобными неняшами, графоманами и формалофагами. Как вы умудряетесь писать так непонятно?
>> No.36660 Reply
>>36655
> iamnotavariable
> > storing lambda
> > not a variable
so sad.
>> No.36661 Reply
File: 13630445512243.png
Png, 89.91 KB, 357×366 - Click the image to expand
edit Find source with google Find source with iqdb
13630445512243.png
>>36655
> лямбда является синтаксическим сахаром
> лямбда является синтаксическим сахаром
> лямбда является синтаксическим сахаром
>> No.36663 Reply
>>36655
> iamnotavariable
Вообще-то в питоне это именно что обычная переменная. Впрочем, лямбды для этого не нужны, можно и
def func1()
    return

somevar = func1
>> No.36668 Reply
>>36660
Строго говоря, даже функциональные языки не могут считатся чисто функциональными, ведь там тоже есть типы и часто некое подобие определения типов.

Представил ученика, спрашивающего какой тип данных хранится в корне уравнения, и не написано ли там "хуй".
>> No.36669 Reply
>>36668
Функциональные языки не обязаны не иметь типов. Нужны просто первокласные функции и средства для того, чтобы писать функционально чисто было удобно.

>>36663
Ну а для того, чтобы не засорять неймспейсы...
>> No.36672 Reply
>>36669
> Функциональные языки не обязаны не иметь типов.
Я это и имел ввиду, намекая на то что формальное соответствие термину и употребляемое соответствие термину - не одно и то же; иногда удобнее пользоваться разными рамками.
>> No.36681 Reply
>>36655

Да уж он-то всяко лучше тебя. Он хоть криво, но объяснил про замыкания, а ты даже не заикнулся.
>> No.36702 Reply
Я ещё не дочитал до работы с пакетами, но хочу прогать уже сейчас. В CL есть менеджер пакетов, как pip в питоне?
>> No.36704 Reply
>> No.36707 Reply
>>36704
Спасибо :3

Лиспер.ру лучше лисп.ру?
>> No.36709 Reply
>>36707
На первом информация поновее.
>> No.36810 Reply
Братишки, (никто не видел|не писал себе) библиотеку для работы с вк апи? Поделитесь, пожалуйста.
>> No.36867 Reply
>>36810

API, библиотеки, ввод-вывод, вконтакте… экая дурнопахнущая куча баззвордов! Да всё это ненужно. Ты не понимаешь, Лисп не предназначен для таких „задач“. Он работает по-другому.
>> No.36870 Reply
>>29402
За сколько часов реально задрочить Лисп по книгам — Грэм, pcl, sicp — для scheme, учитывая при том, что знание другого простого высокоуровневого серверного языка мешает пониманию и сосредоточению? Цель не познать дзен и вернуться на прежний язык, а задрочить лисп и остаться навсегда на нем. Не фанбой, кодингом не зарабатываю. Хочу исключительно для саморазвития.
>> No.36871 Reply
File: 1390336663889.png
Png, 1.43 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1390336663889.png
>>36867
> ставит кавычки-лапки вместо ёлочек
Вот что может написать такой человек? Правильно, только бред. Алсо, капча намекает.
>> No.36873 Reply
>>36870
> остаться навсегда на нем.
Не рекомендую CL или Схемку оставлять, там всё старое и не работает. Т.е., у тебя не будет нормальных библиотек. Даже гуи замутить - огромная проблема. Потому схемки/кл - это поиграться-поучиться, а на clojure, например, можно писать, потому что там все либы жавы + целая куча новых нативных, и хорошая система пакетов, которая использует maven. Потому не нужно даже ничего качать, ты просто пишешь зависимость от пакета и версии, а оно все рекурсивно выкачивает с правильными версиями. Ну и gui через seesaw охуенное.
>> No.36874 Reply
File: Без-имени.jpg
Jpg, 47.98 KB, 391×308 - Click the image to expand
edit Find source with google Find source with iqdb
Без-имени.jpg
Пример из книжки не работает почему то. Я совсем не разбираюсь, только начал http://www.gigamonkeys.com/book/practical-a-simple-database.html
использую имакс sbcl slime
>> No.36875 Reply
>>36874

У тебя Ctrl+C с ошибками копирует? Почему with-standard-io-syntax здесь превратился в with-standart-io-syntax?
>> No.36876 Reply
>>36875
невнимателен. спасибо
>> No.36877 Reply
>>36867
Скорее всего ты дело говоришь. Просто не хотел смешивать с питоном, у которого есть батарейка для вкашки. Алсо, нагуглилось вот http://lisper.ru/apps/format/206 но там нет документации для ньюфагов.
>> No.37473 Reply
>>36873
Анон, пожалуйста подскажи с чего начать. Только с чего начать, дальше сам разберусь :3
>> No.37474 Reply
>>37473
С установки mit-scheme и скачивания sicp :3
>> No.37475 Reply
>>37473
Я уж собирался всё подсказать, а если только с чего начать, то даже и не знаю.
>> No.37476 Reply
>>37475
Тогда давай всё, лишним не будет.
>>37474
Лучше читать sicp на русском или на английском? В английский могу.
Спасибо :3
>> No.37480 Reply
>>37476
Если можешь, то лучше на ангельском.
>> No.37482 Reply
File: 139050007974577.jpg
Jpg, 58.00 KB, 621×437 - Click the image to expand
edit Find source with google Find source with iqdb
139050007974577.jpg
>>37480
Я бы посоветовал http://lisper.ru/pcl/pcl.pdf. Это если ты хочешь Common Lisp, а не Scheme.
>> No.37483 Reply
>>37482
Но Scheme проще CL, а SICP даст больше.
>> No.37484 Reply
>> No.37597 Reply
* (ql:quickload :drakma) To load "drakma":    Load 1 ASDF system:
`drakma`
; Loading "drakma" ... debugger invoked on a SIMPLE-ERROR in thread #<THREAD "main thread" RUNNING {AB1F729}>:    While computing the class precedence list of the class named CL+SSL::BIO-METHOD-TCLASS. The class named CFFI::TRANSLATABLE-FOREIGN-TYPE is a forward referenced class. The class named CFFI::TRANSLATABLE-FOREIGN-TYPE is a direct superclass of the class named CL+SSL::BIO-METHOD-TCLASS.
`Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.`
restarts (invokable by number or by possibly-abbreviated name):    0: [TRY-RECOMPILING] Recompile bio and try loading it again    1: [RETRY ] Retry loading FASL for #<CL-SOURCE-FILE "cl+ssl" "bio">.    2: [ACCEPT ] Continue, treating
                   `loading FASL for #<CL-SOURCE-FILE "cl+ssl" "bio"> as`
                   `having been successful.`
   3: [ABORT ] Give up on "drakma"    4: Exit debugger, returning to top level.
`(SB-PCL::CPL-ERROR`
 `#<STANDARD-CLASS BIO-METHOD-TCLASS>`
 `"The class ~A is a forward referenced class.~@`
                      `The class ~A is ~A."`
 `"named CFFI::TRANSLATABLE-FOREIGN-TYPE"`
 `"named CFFI::TRANSLATABLE-FOREIGN-TYPE"`
 `"a direct superclass of the class named CL+SSL::BIO-METHOD-TCLASS")`
`0]` 
>> No.37761 Reply
SICP достаточно сложная хрень на самом деле, хоть и наверно полезная. Пробовал писать на кложуре (не знаю, насколько тру лисп это), мне она показалась проще всяких питонов и руби, можно сесть и херачить практически сразу, вообще простой язык. Так что может не заморачиваться по теориям и кукареканьям, а начать тупо писать что-то; думаю всякие коммон лиспы не сложнее, если их хочется.
>> No.37763 Reply
>>37761
> не заморачиваться по теориям и кукареканьям, а начать тупо писать что-то; думаю всякие коммон лиспы не сложнее, если их хочется.
Именно. Когда хочешь научиться плавать или ездить на велосипеде, то нужно плавать или ездить не велосипеде. Уже потом можно изучить закон Архимеда или устройство велосипеда.
>> No.37808 Reply
>>37761
Кложура збс. Учитывая, что там немутабельные переменные, то язык очень толсто намекает на функциональный стиль. Да и лисп же. Да и новый лисп же, с ленивостями, тредами, системой транзакций, агентами, персистентными массивами искаропки, диспатчем массивов и списков. Короче, я вообще не знаю, зачем ебать трупы, если есть кложур.
>> No.37809 Reply
>>37808
> Короче, я вообще не знаю, зачем ебать трупы, если есть haskell.
>> No.37810 Reply
>>37809
Хаскелл не лисп. Убогий странный синтаксис, в отличии от кода-как-данных. Да и статикопараши не нужны.
>> No.37814 Reply
>>37810
Clojure - это вообще последнее, на что стоит смотреть. Рич Хикки - мерзкий говнюк. Само его существование является оскорблением наследия Лиспа, гения МакКарти и всех тех трудов, которые Лисперы вкладывали в дело за последние годы. Тот факт, что Clojure работает на JVM - это мелочь по сравнению с прочими смертными грехами, каковых настолько много (и которые так меня бесят), что я здесь даже половины не перечислю.
Ну что, начнем со сваливания в кучу функций и значений? В нормальном Лиспе головные формы распознаются моментально, потому что они, блядь, идут в начале списка. Когда с этим облажались в Scheme, было уже довольно хреново; еще хуже стало, когда на те же грабли наступил Пол «Поглядите-я-даже-не-знаю-что-такое-интерактивная-разработка» Грэм. И что, никто ничему не научился на их ошибках? Ах, ну да, в Scheme попытались это вылечить так называемыми «гигиеническими макросами», которые были хотя бы юзабельны, несмотря на убогость. В Clojure даже того нет - это просто смешно.
Но это еще не самое плохое. В Clojure слишком много синтаксиса! Похоже, что Хикки в качестве модели выбирал Haskell. Я не припомню другого языка, в котором было бы столько синтаксиса. В виде Кложуры мы получили самый синтаксически тяжеловесный лисп-подобный язык на сегодняшний день. («Лисп-подобный» - потому что, за исключением самых поверхностных моментов, на самом деле в Кложуре нет ничего от Лиспа.) Самые обычные вещи, которые тривиально реализуются в терминах головных форм, в Clojure превращаются в мешанину из скобок и разделителей, даже в элементарнейших случаях. [foo] вместо (list foo), {:foo bar} вместо (dict :foo bar)...
Лямбда. Это слово пишется как «lambda», а не «fn». Не так уж и сложно набрать, правда, мистер Хикки? Что, руку вывихнул, пока дрочил на собственное дутое ЧСВ? Надеюсь, руки у тебя отсохнут и отвалятся, а сам ты сдохнешь. Потому что ты угробил Лисп для огромного количества людей. Ты даже не можешь напечатать «lambda»? Серьезно? Не верю.
И да, к слову об ABCL. Он уже есть и прекрасно работает на JVM. Нет никаких причин плодить еще один диалект.
>> No.37816 Reply
>>37814
> Самые обычные вещи, которые тривиально реализуются в терминах головных форм, в Clojure превращаются в мешанину из скобок и разделителей, даже в элементарнейших случаях. [foo] вместо (list foo), {:foo bar} вместо (dict :foo bar)...
Когда я изобретал свой Лисп (просто так, от нечего делать) я тоже это заметил. Список можно задать как (' a b c d) или как (. a b c d) или ещё с помощью какого-нибудь мелкого символа - и тогда функции не будут смешаны со значениями. Этот символ, кавычка или точка - имя функции, которая вернёт список. "Всё функции".

Но я не так категоричен в отношении Clojure. Чем больше языков, тем лучше.
>> No.37818 Reply
>>37810
> Да и статикопараши не нужны.
Нет, ты снова всё перепутал. Не нужны твои динамические скриптопараши. За Хаскеллем будущее, но тебе, макаке, этого понять не дано.
>> No.37827 Reply
>>37761
> сложная хрень
Только для умственно неполноценных. Прорешать большую часть заданий из сицпа под силу даже девятикласснику.
>> No.37910 Reply
Привет анон, я слегка не по адресу, и ньюфаг тред не тут, однако попробую.
Подскажи, как мне наиболее корректным образом с точки зрения языка написать программу, которая бы выводила пирамидку - как трифорс, но заданной высоты, на Clojure.

У меня получилось как-то так:
'(defn triforce
   [height]
(defn get-chars
  [number ch-seq]
  (dotimes [n number] (print ch-seq)))
(loop [i 0]
  (when (< i height)
    (get-chars (- height i) "\u00A0" )(get-chars (+ i 1) "\u25B2\u00A0")(println)
    (recur (inc i)))))'
>> No.37926 Reply
>>37910
Использовать рекурсию вместо цикла, конечно же!
>> No.37932 Reply
>>37926
> рекурсию
> clojure
>> No.37937 Reply
>>37932
Невероятное красноречие.
> Clojure is a functional programming language. It provides the tools to avoid mutable state, provides functions as first-class objects, and emphasizes recursive iteration instead of side-effect based looping.
http://clojure.org/functional_programming
>> No.38223 Reply
Господа лисперы, ответьте, пожалуйста, на два вопроса.
1. Правда ли, что код на лиспе перед выполнением транслируется в Си?
2. Как я могу сохранить буфер с определениями функций в связке Slime+Emacs+REPL при перезапуске лисп-бокса?
>> No.38224 Reply
>>37937
Ну и толку от этой рекурсии без TCO?
>> No.38226 Reply
>>38223
> код на лиспе перед выполнением транслируется в Си
Лиспу лет больше, чем С. Сам то как думаешь?
>> No.38227 Reply
>>38226
Лисп за это время совсем не изменился?
>> No.38228 Reply
File: 1c094f9fc3db0150b537df5c9bddecfa.png
Png, 145.20 KB, 700×700 - Click the image to expand
edit Find source with google Find source with iqdb
1c094f9fc3db0150b537df5c9bddecfa.png
>>37814
> и всех тех трудов, которые Лисперы вкладывали в дело за последние годы
То есть, никого не оскорбляет.
> Тот факт, что Clojure работает на JVM
- это хорошо, потому что открывает доступ к огромному спектру библиотек.
> Ну что, начнем со сваливания в кучу функций и значений?
LISP1 vs LISP2.
Значения-функции не нужны. LISP1 куда более натуральный, в нем нет необходимости писать ебанные funcall каждый раз, когда запускаешь функции с переменных.
> Я не припомню другого языка, в котором было бы столько синтаксиса.
О боги, синтаксис для мэпов и для векторов! Все в лисп-машину!
> [foo] вместо (list foo)
Ты даже не знаешь, о чем говоришь.
> {:foo bar} вместо (dict :foo bar)
Меньше скобкоошибок из-за того, что скобки разные. Меньше букв.
> Это слово пишется как «lambda», а не «fn». Не так уж и сложно набрать, правда, мистер Хикки?
Вообще-то сложно. Почему такая основополагающая штука так длинно пишется?

>>38224
Есть recur, trampoline и ленивые списки. Последнее наиболее удобное, пожалуй.

>>38223
> 2. Как я могу сохранить буфер с определениями функций в связке Slime+Emacs+REPL при перезапуске лисп-бокса?
C-x C-s
C-x C-w
Или что ты имеешь в виду?
> 1. Правда ли, что код на лиспе перед выполнением транслируется в Си?
Нет, он выполняется либо в трансляторе лиспа, либо в JVM (clojure).

>>37910
http://ideone.com/P1eTMF
Пиши функционально. Не думай циклами, думай цепочками преобразований. Разделяй чистые функции (такие, которые возвращают всегда одинаковый результат для одинаковых входных данных) от функций с сайд-эффектами. Присваивания, ввод/вывод - сайд-эффекты. Хинт: Когда пишешь map под сайд-эффекты - пиши doall перед ним, т.к. map в кложур ленивый.
Держи читы. http://clojure.org/cheatsheet
Бака-бака, из-за тебя я треть обеда пропустил.
>> No.38229 Reply
>>37926
Кстати, это достаточно известное заблуждение, что в функционалке просто все циклы заменяются рекурсиями. Есть такие вещи, как map, filter, recur для работы со списками, а циклы вне списков обычно и не нужны (а когда нужны - можно сделать через iterate, который возвращает ленивый список применений функции на стартовое значение).
>> No.38230 Reply
>>38227
Изменился. Но из нормального продукта делать уберкостыли никто бы не стал.
>> No.38231 Reply
>>38229
> Есть такие вещи, как map, filter, recur
Эти "вещи" -- библиотечные функции высшего порядка. Рекуррентные. Я что-то не понял, что ты имел в виду.
> а циклы вне списков обычно и не нужны
А что, кроме списков никаких структур данных больше нет? Тогда бы уж про Foldable/Traversable рассказал.
>> No.38232 Reply
>>38231
> А что, кроме списков никаких структур данных больше нет?
List, queue, hash/sorted-map, hash/sorted-set, и даже всякие жавовские массивы - это все генерализированно, как Collection. В результате функции высшего порядка принимают любую структуру-коллекцию.
> Тогда бы уж про Foldable/Traversable рассказал.
Это какая-то хаскельная типизация? Вотевар, все коллекции фолдаются и мэпятся, потому я не вижу, о чем тут говорить.
> Рекуррентные.
> > map, filter
Хех мда))
>> No.38233 Reply
>>38232
> List, queue, hash/sorted-map, hash/sorted-set, и даже всякие жавовские массивы
Бака я бака, векторы-то забыл.
>> No.38235 Reply
File: FUCK.jpg
Jpg, 33.27 KB, 343×327 - Click the image to expand
edit Find source with google Find source with iqdb
FUCK.jpg
>>38232
> Хех мда))
> Использует )) на бордах
> В треде про лисп (!)
>> No.38236 Reply
>>38232
> все коллекции фолдаются и мэпятся
Стрим попробуй фолднуть. Когда получится, вернёшься.
>> No.38237 Reply
File: 6db.jpg
Jpg, 73.85 KB, 600×446 - Click the image to expand
edit Find source with google Find source with iqdb
6db.jpg
>>38236
http://clojure.org/streams
> Streams
> (Note: this section describes work in progress, currently only available in SVN)
Окей, как-нибудь попробую. Когда-нибудь, когда будет смысл.

>>38235
Вау взрыв!
>> No.38238 Reply
>>38237
Можешь уже сейчас начинать, держи:

data Stream a = a :> Stream a
>> No.38239 Reply
>>38238
> Можешь уже сейчас начинать, держи
Я бы начал, но вот это ":>" как-то криво улыбается.

Кстати, а я правильно понимаю, что там по моему линку стримы вообще-то фолдают?
>> No.38240 Reply
>>38239
> стримы вообще-то фолдают?
У них костыльные стримы. Я не нашёл так быстро, какой порядок редукции использует этот ваш clojure, но похоже не call-by-name. Поэтому и стримы неправильные.
>> No.38241 Reply
>>38240
Потому что стримы call-by-need, а редукция - normal order. call-by-name кложур не практикует.
>> No.38242 Reply
>>38228
> C-x C-s
> C-x C-w
> Или что ты имеешь в виду?
Хотелось бы, чтобы после перезапуска лисп-бокса определения функций не нужно было вбивать по новой или копипастить. Как-то чтобы они сами подцеплялись обратно. Все написанные defun'ы.
>> No.38243 Reply
>>38242
Т.е., после перезапуска лисп-машины? Найди eval-buffer или eval-region и еваль весь файл в пару кликов.
И куда ты копипастишь? В emacs практикуют C-x e (или C-c e где-то) после закрытой скобки для евала.
>> No.38245 Reply
>>38228
> Почему такая основополагающая штука так длинно пишется?
λ
>> No.38264 Reply
>>38245
Такой буквы на клавиатуре нет. Вопрос не во внешнем виде, а в скорости написания.
>> No.38265 Reply
>>38264
В ~/.XCompose прописываешь:

<Multi_key> <l> <a> : "λ" U03BB # GREEK SMALL LETTER LAMDA

и не ебешь анонам мозг.
>> No.38266 Reply
>>38264
(define-abbrev-table 'global-abbrev-table '(("fn" "λ")))
http://ergoemacs.org/emacs/emacs_n_unicode.html
>> No.38273 Reply
>>38266
И пользоваться юникодом вместо кода? А если я не из емакса захочу написать, а в ideone, то все?
Блджад, fn - нормальное сокращение анонимной функции. Да и лямбдами в понятии lambda calculus они никогда не были.
>> No.38281 Reply
>>38273
> fn - нормальное сокращение анонимной функции
> sqrt - нормальное сокращение арккосинуса
>> No.38284 Reply
>>38281
anomymous-function.
>> No.38288 Reply
>>38284
afn /= fn
и везде это лямбдой завется
>> No.38289 Reply
>>38288
> везде
> считает, что его CL/scheme-мирок - это всё
Небось еще считаешь, что car, cdr, progn нужно писать, потому что first, next, begin хуже?
Воспринимай это иначе. Все-таки у нас первоклассные функции, и они все создаются через fn, даже именованные, т.к. defn - обертка над fn. Потому называть его как-то afn или хуяfn нет смысла, т.к. fn - это создание функции.
>> No.38291 Reply
>>38289
определять /= создавать? да пошли вы со своим хикки. кложура не лисп
>> No.38297 Reply
>>38291
сам иди. кложура лисп.
>> No.38298 Reply
>>38297
нет, не лисп
>> No.38300 Reply
>>38298
по какому критерию?
>> No.38322 Reply
>>38300
> Кложура — это не лисп вообще. Это Java, переведенная на S-выражения.
Пишет нам всемирно известный программист hagane.
> кложура - не лисп, а грязный панк-хипстеро-ребёнок от лиспа и джавапараши.
Вторит ему некто под номером 345597.

В англоязычных интернетах упоминается некая мантра "Clojure is not Lisp and is thus defeat!", но гугл ничего не нашёл по этому поводу.
>> No.38325 Reply
File: 2014-03-25-09_53_20-Greenshot.jpg
Jpg, 368.94 KB, 1344×667 - Click the image to expand
edit Find source with google Find source with iqdb
2014-03-25-09_53_20-Greenshot.jpg
>>38322
> Пишет нам всемирно известный программист hagane.
Ваш всемирно известный программист - аниме.
А еще он пишет с сайд-эффектами. Это потому он так не любит clojure?
https://github.com/hagane/lolscape/blob/master/quadtree.scm
> некто под номером 345597
Которого нет. >>/s/345597
> упоминается
> но гугл ничего не нашёл
Лел.
Но вообще ты не умеешь в гугл. Цитаты нужно брать в "" скобки. А так находит ОДИН лог из #clojure.
>> No.38333 Reply
>>38325
Это номер поста из какого-то анонимного форума, можешь по фразе найти.
В каком месте я не умею в гугл? Раз такой умный, найди мне еще сайты, где встречается эта фраза, кроме лога той конфы, в котором я ее и увидел.
>> No.38339 Reply
File: f6f683e88f81de47355b7e8a2fb666ca.jpg
Jpg, 263.58 KB, 955×824 - Click the image to expand
edit Find source with google Find source with iqdb
f6f683e88f81de47355b7e8a2fb666ca.jpg
>>38333
Я не вижу конструктива. В кложур есть ленивые списки, персистентные векторы, мэпы, очереди, сеты, система транзакций, promise/future, деструктуризация в обьявлении локальных переменных. В кложур есть leiningen, который стандартизирует структуру проэктов и разрешает использовать maven, что выливается в автоматическое скачивание нужных пакетов, без половой ебли. Кложур хавает жавалибы без особых проблем, и даже позволяет всунуть жавакод в проэкт и интероперировать.
Что предлагает нам коммоно-схемкомирок вместо этого всего? Красивое написание слова "лямбда"?
>> No.38340 Reply
>>38339
> Что предлагает нам коммоно-схемкомирок вместо этого всего?
лисп предлагает
>> No.38341 Reply
>>38340
enwiki://Lisp_(programming_language)
Ах, ну тогда у clojure явное преимущество, потому что он тоже предлагает лисп.
>> No.38342 Reply
>>38341
define "преимущество"
>> No.38343 Reply
>>38342
Вот это >>38339
>> No.38346 Reply
>>38343
Это джавапараша же.
>> No.38347 Reply
>>38322
всемирно известный программист hagane, некто под номером 345597 и англоязычные интернеты ошибаются. скорее всего, ошибаются так же, как и ты.

кложура лисп.
>> No.38348 Reply
>>38347
по какому критерию?
>> No.38349 Reply
>>38348
по семантике.
>> No.38382 Reply
А прикиньте, выучить LISP с нуля? Это реально?
>> No.38385 Reply
>>38382
А ты хочешь учить с конца?
>> No.38386 Reply
>>38382

Вполне. Я выучил, брат жив, зависимости никакой.
>> No.38420 Reply
>>38382
Так говоришь, будто это сложно. Простой язык же. Держи читы.
http://clojure.org/cheatsheet
>> No.38424 Reply
>>38420
он лисп хочет выучить
>> No.38428 Reply
>>38424
Хорошее желание. Вот читы.
http://clojure.org/cheatsheet
>> No.38429 Reply
>>38428
а такое же, но только на лиспе есть?
>> No.38469 Reply
>>38429
Конечно есть. Держи.
http://clojure.org/cheatsheet
>> No.38470 Reply
File: 5a30c6499e1d.jpg
Jpg, 90.94 KB, 460×458 - Click the image to expand
edit Find source with google Find source with iqdb
5a30c6499e1d.jpg
>>38469

Clojure - это не лисп.
>> No.38471 Reply
>>38470
Прекрати форсить это говно.
>> No.38472 Reply
>>38471

Я? Я вообще мимо проходил.
>> No.38473 Reply
>>38472
Ты тут весь тред мимопроходишь и безосновательно выкрикиваешь одну и ту же мантру.
>> No.38475 Reply
>>38473
Угомонись, бугуртыш. Это я сорт оф срач затеял в прошлый раз, но не смог придумать смешной ответ про семантику и ушёл.
>> No.38476 Reply
>>38473
выше паста с лора все поясняет
>> No.38477 Reply
File: давайте без этого!.jpg
Jpg, 29.68 KB, 233×394 - Click the image to expand
edit Find source with google Find source with iqdb
давайте без этого!.jpg
>>38476
Ты имеешь в виду того глупышку, который в схемке императивно пишет? И почему его слова нужно рассматривать всерьез? Алсо схемка - не лисп http://c2.com/cgi/wiki?IsSchemeLisp .
Англовики пишет, что кложур - лисп. В треде задавался вопрос, чем Scheme/CL лучше Clojure. В ответ лишь одна тупая мантра. Это реально надоедает и начинает попахивать форсом. Алсо, про семантику писал не я, тут еще как минимум один рандомный кложурщик.
>> No.38516 Reply
File: emacs_pretty_lambda_26110.png
Png, 51.93 KB, 591×422 - Click the image to expand
edit Find source with google Find source with iqdb
emacs_pretty_lambda_26110.png
>>38273
в 24 имаксе есть prettify-symbols-mode
http://ergoemacs.org/emacs/emacs_pretty_lambda.html
>> No.38517 Reply
>>38516
Я знаю. Проблема не в отображении, писать дольше. Это дискареджит.
>> No.38518 Reply
>>38517
> писать дольше
вот так. хватит хикки защищать
(define-abbrev-table 'global-abbrev-table '(("fn" "lambda"))). еще автокомплит есть
>> No.38521 Reply
>>38518
> еще автокомплит есть
do not trall plz. Автокомплит имеет смысл с 3+ букв, иначе он тормозит среду. И табать автокомплит явно медленнее, чем писать две буквы.
> (define-abbrev-table 'global-abbrev-table '(("fn" "lambda")))
И тут ты такой пишешь переменную, в которой есть буквосочетание "fn".
>> No.38524 Reply
>>38521
(global-set-key (kbd "C-/") "lambda") и что быстрее?
>> No.38526 Reply
>>38524
fn, т.к. пальцы на "фыва-олдж".
>> No.38527 Reply
>>38526
а мизинцы на "C-'" - это по скорости как одно нажатие. даже пальцем двигать не нужно. проверил
>> No.38528 Reply
>>38527
Ты так мизинцы убьешь. C-/ - это нажатие двумя пальцами правой руки, смещаясь от стандартного расположения.
>> No.38530 Reply
>>38528
Глупости какие. Наоборот, разовьёт, а то у большинства людей левая рука вообще убогая.
>> No.38748 Reply
>>38223
1.Целиком и полностью зависит от конкретной имплементации.
SBCL вообще в машинный код компилит.
2.Запихни в конфиг своего лиспа ~/.sbclrc например.
>> No.38756 Reply
>>38339
Удобно ли в кложур пердолиться в мутабельность? Сколько памяти она жрет и как долго стартует?
>> No.38762 Reply
>>38756
Как Java.
>> No.38768 Reply
>>38762
Почему тогда на андроиде все жалуются на долгий старт @ тормоза?
>> No.38771 Reply
>>38768
Потому что у андроида dalvik, а не jvm. Потому что ынтырпрайз-сервер с дохуя быстрых ядер и прорвой оперативы, не китайфон. Потому что субъективно. Мой галакси с3 мини вполне меня устаивает скоростью.
>> No.38774 Reply
>>38771
> Потому что ынтырпрайз-сервер с дохуя быстрых ядер и прорвой оперативы, не китайфон.
Т.е. жрет дофига все таки?
А что у тебя на кложуре написано для Андроида, что ты гоняешь на телефоне?
>> No.38812 Reply
>>38756
> Удобно ли в кложур пердолиться в мутабельность?
А зачем?
Мутабельных переменных по-дефолту нет. Мутабельных структур - тоже. Есть мутабельные обертки, такие как atom(изменения не тред-сейфовые, way-to-go если хотим мутабельную структуру просто так) или ref(изменения только в транзакциях). Можно получить мутабельную структуру данных на время, а потом опять превратить в персистентную (это делается для оптимизаций).
> Сколько памяти она жрет и как долго стартует?
Стартует долго даже на пека. С памятью вроде не так уж плохо.
>> No.38822 Reply
>>38812
Ну там производительность иногда улучшается от мутабельности, память опять же.
Спасибо за ответ.
>> No.38829 Reply
>>38822
> Ну там производительность иногда улучшается от мутабельности
Для этого специально и сделали http://clojure.org/transients
>> No.38850 Reply
>>38822
> память опять же
Ах, да. Я забыл сказать, что там персистентные структуры по-дефолту, и потому с памятью в чистом фп-подходе не все так плохо. Массив с одним измененным элементом использует все элементы старого массива, кроме одного. Ну и гарбаж коллектор время от времени чистит те стейты, которые больше не нужны.
>> No.40830 Reply
Ну что ж я за неудачник такой, сисп не могу осилить. Да вообще никакую книгу до конца не осиливаю.
>> No.40848 Reply
>>40830
Да её никто до конца ниасиливает.
>> No.41659 Reply
Начинаю читать land of lisp. Какие-нибудь советы, пожелания?
>> No.41712 Reply
>>41659
Скачал и пробежался глазами. Какая-то вообще невероятная укуренная книга же. + Я что-то не вижу всяких currying vs partially applied functions, soundness vs completeness - собственно всей той академеческой шняги ради которой люди учат лисп. Ну и иллюстрация на примере игро-поделки вместо комбинатора парсеров - явная какая-то замануха и разводилово же.
>> No.41923 Reply
>>41659
Мне книга понравилась, но CL - язык на любителя.
>>41712
> академеческой шняги ради которой люди учат лисп
CL же более практический, чем нацеленный на обучение. Потому, думаю, и подход (и в дизайне языка, и в книге) больше инженерный, чем теоретический.
>> No.42652 Reply
Бамп.
>> No.42722 Reply
>>38812
> atom(изменения не тред-сейфовые
Как это не тред-сейфовые, ты охуел что ли? Вообще, почти все изменяемые данные в кложурце тред-сейфовые по умолчанию. А атомы не координированные, простой compare-and-swap, ты это имел в виду.
>> No.42727 Reply
А есть ли какие-нибудь живые инциативы у лиспо-коммьюнити? Что-то ни на реддите, ни на SO никакого общего движа не видно. Вон, Дейкстрой проклятая джава родила Скалу и постепенно Apache Foundations проекты становятся реактивными & функциональными, а как же лиспы? Мне олдовые кодеры говорили, что лиспы обещали гораздо больше, чем могли дать, поэтому проиграли конкуренцию в академии\индустрии. Просто странно, штуки второй сортности типа руби, перла, го живуте себе в своих нишах, а как же лиспы? Вот это вот все не дает мне покоя.
>> No.42731 Reply
>>42727
Эм, ну вышеупомянутый кложур живет и процветает как бы. Олсо, руби - это ж и есть лисп, только кривой. А вообще, сейчас ТИПЫ модны, и под функциональщиной зачастую подразумевают именно ТИПЫ.
>> No.42739 Reply
>>42731
> кложур
> процветает
Кложур-то знает об этом? Не мёртв, да. Но никак уж не процветает.

Знание функциональщины у большинства ограничивается знанием map.
>> No.42752 Reply
>>42739
> Не мёртв, да. Но никак уж не процветает.
Ну а как это еще назвать? Нишу свою занял, комьюнити достаточно большое, чтобы самоподдерживаться, light table и datomic написали, в каждой новой версии очень вкусные фичи, clojurescript очень ок... Что еще нужно?
> Знание функциональщины у большинства ограничивается знанием map.
Знание академической музыки у большинства ограничивается знанием вступления к пятой симфонии, знание кинематографа у большинства ограничивается знание лент тарантины, знание сортов пива у большинства ограничивается знанием балтики девяточки, etc... Не знаю, как тебя, а меня это не особо колышет.
>> No.43034 Reply
Сап, лиспач.
Я тут решил перелезть с крестов на CL, и у меня осталось навязчивое желание писать всё без рекурсии. Так ли надо об этом волноваться, как в C/C++? (Там же типа, если нет корня или логарифма для оценки глубины, то и заикатся не стоит. А тут она форсится везде.)

Заодно бампану тред самого мощного языка.
>> No.43035 Reply
>>43034
У тебя мистическое представление об рекурсии. Во-первых, есть рекурсивные алгоритмы (обход деревьев, жадные алгоритмы). Во-вторых, о рекурсии говорят обычно в связке цикл for vs рекурсия. В цикле ты используешь индекс, хотя алгоритмы, где при обходе массива тебе он нужен - их штук 20 не больше (в основном, это статистика, вычисления над потоком). И обычно чуваки пришедшие из С\С++ очень плохо могу сразу переформулировать задачу в терминах map-reduce, поэтому им требуется время освоиться с sicp идеологией, а потом они уже не волнуются и не задумываются про рекурсию. И третий поинт, это хвостовая рекурсия и возможность оптимизации, но об оптимизации думай в последнюю очередь, думай сначала про O(n), а потом про константы.

Так что просто забудь все, что ты знал, все страхи и волнения и учи лисп как первый язык.
>> No.43036 Reply
File: Ucchi10.jpg
Jpg, 80.98 KB, 574×839 - Click the image to expand
edit Find source with google Find source with iqdb
Ucchi10.jpg
>>43035
> Так что просто забудь все, что ты знал, все страхи и волнения и учи лисп как первый язык.
Visual Basic 6.0? Ну ок.
Сколько разной херни я в нём понаписал. И книжку Брауна перечитывал раз на 10.
Спасибо.
>> No.43226 Reply
>>43034
> Сап, лиспач.
> Я тут решил перелезть с крестов на CL, и у меня осталось навязчивое желание писать всё без рекурсии. Так ли надо об этом волноваться, как в C/C++? (Там же типа, если нет корня или логарифма для оценки глубины, то и заикатся не стоит. А тут она форсится везде.)
Ты путашь с функциональщиной типа цацкелей всяких, там рекурсия - один из приёмов борьбы с самим собой написания на функционально чистом языке кода, способного вообще что-то делать. В лиспах (в CL в частности) рекурсию никто не форсит, и её применять оправдано только если алгоритм реально рекурсивный. По моему опыту - гораздо чаще используются циклы (loop, iterate), чем рекурсия.
>> No.43861 Reply
Бамп, лисперы.

Дорогие, кто-нибудь ningle пользовал тут?
Или вообще что угодно, основанное на clack.

Для интересующихся:

Нингель: http://8arrow.org/ningle/
Кляцк: http://clacklisp.org/
>> No.43907 Reply
>>43034
При чем тут сложность алгоритма к итеративному/рекурсивному подходу?

Суть в том, что тебе не нужна рекурсия обычно. Обычно все, что можно сделать с цикла for, можно сделать через map, reduce, some или filter. Т.е., high-order функциями. Рекурсия нужна очень редко, даже если писать функционально чисто (т.е., не используя циклы с присвоениями внутри там, где их можно не использовать).
>> No.43908 Reply
>>43907
> Рекурсия нужна очень редко, даже если писать функционально чисто (т.е., не используя циклы с присвоениями внутри там, где их можно не использовать).
> Обычно все, что можно сделать с цикла for, можно сделать через map, reduce, some или filter.
но все функции, которые ты перечислил - рекурсивные.
или ты хочешь сказать, что не нужно писать рекурсию самому?
>> No.43909 Reply
>>43908
Все эти функции можно реализовать императивно, циклом по аргументам. И я даже практически уверен, что для оптимизаций многие языки так и делают.

Да, мне не нужно писать рекурсию самому. Мне нужно только вписать лямбду в хай-ордер, что в разы проще и в написании, и в понимании. Как там написан сам хай-ордер - это уже вопрос третий. Главное чтобы функционально чисто, и делал то, что я ожидаю от него.
>> No.43910 Reply
>>43907
Ты глубоко не прав. Если ты используешь алгебраические струкутуры данных, то тебе надо пилить к ним интерфес по типу монадок.
>> No.43911 Reply
>>43910
При чем тут алгебраические структуры данных?
При чем тут интерфейсы?
>> No.43912 Reply
>>43911
Возьмем, например, дерево. Для него тебе надо писать fold, ну а через него и остальные map-reduce. Fold - рекурсивная функция. То есть для любой задачи, где тебе надо хранить данные в своей коллекции (дерево, граф), тебе надо писать fold и, возможно, еще несколько специальных оптимизированных (non-strict) reduce функций.
>> No.43914 Reply
> Да, мне не нужно писать рекурсию самому. Мне нужно только вписать лямбду в хай-ордер, что в разы проще и в написании, и в понимании. Как там написан сам хай-ордер - это уже вопрос третий. Главное чтобы функционально чисто, и делал то, что я ожидаю от него.
ок, да. значит я тебя правильно понял
> Все эти функции можно реализовать императивно, циклом по аргументам. И я даже практически уверен, что для оптимизаций многие языки так и делают.
ну, некоторые вещи, даже самые простые, типа обхода ветвящихся структур, сделать без рекурсии таки не получится

короче, this:
> Возьмем, например, дерево. Для него тебе надо писать fold, ну а через него и остальные map-reduce. Fold - рекурсивная функция. То есть для любой задачи, где тебе надо хранить данные в своей коллекции (дерево, граф), тебе надо писать fold и, возможно, еще несколько специальных оптимизированных (non-strict) reduce функций.
два чая этому оратору
>> No.43915 Reply
>>43912
> Возьмем, например, дерево.
А, ну с этого нужно начинать. Я же говорю о замене for'у, дерево фором никак не обойдешь в любом случае, так что разницы с императивкой нет, все так же само. Map/Reduce/.. - это для одномерных коллекций, если не написать их специально под другого рода структуры.
>> No.44329 Reply
Извиняюсь за оффтоп. Стоит ли задание из SICP выполнять не на scheme.
>> No.44330 Reply
>>43915
> дерево фором никак не обойдешь в любом случае
Дерево по-всякому обходить можно. Должны быть реализованы несколько способов обхода, возможно так же и какой-то дефолтный. Могут быть какие способы, диктованные назначением и видом дерева. Вон, в С++ у деревьев есть реализованный линейный обход в виде итераторов.
>> No.44406 Reply
Аноны, помогите с задачей в SICP (сама задача http://puu.sh/mchMf/a1dd607cef.png, дошел до 39 страницы)
Вот мое решение http://puu.sh/mchR9/1397ec95bd.png , оно верное, но его явно можно упростить и улучшить, как это сделать?
>> No.44407 Reply
>>44406
Ну, для начала, там всего 3 варианта, а не 6. Тебе же пофиг, в каком порядке квадраты брать.
>> No.44452 Reply
File: dunewormsanta.jpg
Jpg, 79.73 KB, 500×684 - Click the image to expand
edit Find source with google Find source with iqdb
dunewormsanta.jpg
тред не читай @ сразу отвечай

Котаны, а поясните за диалекты. В чем, собственно, разница?
>> No.44925 Reply
>>44452
Ну а ты как думаешь?
>> No.44926 Reply
File: qwe13.png
Png, 2.96 KB, 202×34 - Click the image to expand
edit Find source with google Find source with iqdb
qwe13.png
>>44925
Убери эту херню, плез.
>> No.44927 Reply
>> No.45164 Reply
Я тут сомневался в какой тред писать, но у меня абсолютно та же задача что и у >>44406-куна. А ещё где-то тут был целый тред по sicp, может у кого найдётся ссылка.

Я вижу три пути решения: через булевы операции, как собственно у, через вложение свитчей и развилок, и через дополнительные переменные. И не то что бы мне было принципиально хотя хотелось бы то что проще и элегантней, вот только я не определился, но мне не понятно почему Рокет ругается на третий вариант в таком исполнении:
(define (test a b c)
    (+ (if (> a b)
           ((define min b) (* a a))
           ((define min a) (* b b)))
       (if (> c min) (* c c) (* min min))))
define: not allowed in an expression context in: (define min (b))
>> No.45167 Reply
Запощу кстати рабочее:
(define (test a b c)
    (cond ((> a b)
           (+ (* a a) (if (or (> b c) (= b c))
                          (* b b)
                          (* c c))))
          ((< a b)
           (+ (* b b) (if (or (> a c) (= a c))
                          (* a a)
                          (* c c))))
          ((= a b)
           (+ (* a a) (if (> c b) (* c c) (* b b))))))
>>45164

А >>44406 навернётся на (abs 2 2 1)
>> No.45188 Reply
Разъясните ньюфагу, где и для чего вы используете лисп кроме емакса и чем хаскель хуже?
>> No.45189 Reply
>>45188
Лисп используется для обучения программированию в книжке SICP, т.к. эта шняга суперпростая, код представляет собой какбы абстрактное синтаксическое дерево. Хачкель очень математичен и значительно сложнее лиспа. Он не хуже, он другой.
>> No.45190 Reply
>>45189
То есть кроме этой книжки лисп бесполезен?
>> No.45192 Reply
>>45190
Помнится на какой-то конфе типа Стачки, один докладчик говорил что они успешно применяют в продакшене closurescript например.
>> No.45193 Reply
>>45190
Ещё Web-серверах на модулей и маршрутизаторов сетевых настройки задавать удобно нём на.
>> No.45195 Reply
>>45193
От коллег пизды не получишь за это?
>> No.45196 Reply
>>45195
Евrеи все тут - удивляещ мене ти щлёма?
>> No.46021 Reply
File: рыжие-Хоро-spice-and-wolf-неко-980175.jpg
Jpg, 425.49 KB, 602×900 - Click the image to expand
edit Find source with google Find source with iqdb
рыжие-Хоро-spice-and-wolf-неко-980175.jpg
Анон, мне кажется или сообщество common lisp загибается?
Можешь скинуть ссылки на форумы/сайты и подобное с живыми проектами и комьюнити?
>> No.46023 Reply
>>46021
А оно вообще было живым когда-нибудь, лол?

мимо
>> No.46045 Reply
>>46023
В прошлом веке вполне себе живое было. Сейчас уже того фана нет, а в тырпырпрайзе не используется.
>> No.46046 Reply
>>46045
>>46021
Грызите кожуру, она на бохатой жвм. Лишп только для академического задрачивания.
>> No.46047 Reply
>>46046
> Грызите кожуру
Нет, спасибо. Это совсем не тот Лисп, каким его любили.
>> No.46048 Reply
File: песочница-разное-баян-диалог-1042137.jpg
Jpg, 376.86 KB, 624×800 - Click the image to expand
edit Find source with google Find source with iqdb
песочница-разное-баян-диалог-1042137.jpg
>>46045
А что тогда посоветуешь неубиваемое, т.е. мне нужно ядро для системке, которое при случайном эксепшне не будет валиться, а будет работать. В маинстримных языках я не силён, знаю си, там очень легко отстрелить себе ногу, не знаю с++, там ещё легче, java на каждый чих try-catch. Куда копать, чтобы в случае ошибки можно было отладить, не теряя контекста к примеру или на лету переписывать код. Python, Ruby, JS (серверный) позволяют это сделать или лучше копать в сторону функциональных языков. Может я чего-то не знаю?
>> No.46071 Reply
>>46021
#lisp на FreeNode.
>> No.46083 Reply
>>46045
Что на счёт clojure?
>> No.46100 Reply
>>46071
Спасибо, доброанон
>>46045
Было про кложуру. Это не лисп, это что-то другое
>> No.46101 Reply
>>46100
Это диалект лиспа.
>> No.46102 Reply
>>46101
Н-но кложура используется грязными веб-макаками, это никак не может быть что-то близкое к божественному лиспу!!
>> No.46527 Reply
File: 1475686838161.png
Png, 2.06 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1475686838161.png
>>46102
Если человек решился писать на кложуре, да еще и сам, особенно в вебе, то это значит что человек стремится к просветлению.
>> No.47537 Reply
Есть ли в Racket аналоги функций ord и chr (получить код символа, получить символ по коду)?
>> No.47555 Reply
>> No.47602 Reply
Доброаноны, почему кложура считается диалектом лиспа?
Только из-за синтаксиса завязанного на скобочки?
Ну так у той же жабы синтаксис завязан на фигурные скобочки и точки с запятой, прямо как у си. Но никто же не говорит, что жаба -- диалект сей.
>> No.47613 Reply
>>47602
http://alexott.net/ru/clojure/clojure-intro/#sec2

> От Lisp'а Clojure "унаследовал" макросы, мультиметоды и интерактивный стиль разработки, а JVM дает переносимость и доступ к большому набору библиотек, созданных для этой платформы.

И далее отличия: http://alexott.net/ru/clojure/clojure-intro/#sec3

> Только из-за синтаксиса завязанного на скобочки?
Я бы не назвал кложуру лисподиалектом. По синтаксису ЯП оценивет совсем зелень, про скобочки — толстозелень.
>> No.47917 Reply
Лиспаны, что скажете про GNU Guile и GUIXе?
>> No.47942 Reply
>>47917
В Guile обещают не завозить костыли Elisp, а сделать его самостоятельной реализацией R5RS и обратную совместимость с Elisp уже костылять на ней. Вряд ли Guile получит широкое распространение, но было бы здорово иметь фунционал имакса со всеми его расширениями в нормальной виртуальной машине и общаться с ним на нормальном языке. Вряд ли язык получит широкое распространение вне сообщества GNU, хотя всё возможно.
Про GUIX слышал только много похвал, мол оно очень клёво переносит функциональную парадигму в менеджмент пакетов. Может если с ним работать на уровне разработчика и только в GuixSD, оно чувствуется, а на уровне пользователя мне вот и с дебиановским apt'ом очень удобно без всякой функциональщины. Может быть пакеты собирать с GUIX'ом и удобнее будет.
>> No.48200 Reply
>>47942
Спасибо за ответ, анон, подскажи пожалуйста, я правильно понял, что искать кодеров на Guile надо там же где и кодеров на Схеме/Лиспе - так как это почти одно и то же?

> мне вот и с дебиановским apt'ом очень удобно без всякой функциональщины.
Там фишка в том что можно установить сразу n-ное количество версий одной программы, и все будут работать - это даже круче чем в Андроиде. Мне как раз такого не хватает по работе.
>> No.48205 Reply
>>48200
> искать кодеров на Guile
irc://#guile@freenode
> на Схеме/Лиспе - так как это почти одно и то же?
Это всё около-лисповое, но Guile - это ещё и уникальный в своём роде погромистский конструкт, целая языковая башня (https://www.gnu.org/software/guile/manual/html_node/Compiler-Tower.html), по крайней мере по замыслу. Код разных языков можно будет компилировать в один универсальный байт-код виртуальной машины, прикручивать к последней другие компиляторы и таким образом перекидывать фичи из одного языка в другой. То есть это мультиязыковая система с лисповым мета-функционалом. И если я правильно понял, эта башня будет мочь в рефлексию, автомодификацию. Прям запахло ИИ, киберпанком, восстанием машин. Хотя, этим всем пахло и от MOP, но нахуй никому не нужен сейчас ни CLOS, ни тем более MOP. Так, думаю, и с гуайлом будет скорее всего.
> установить сразу n-ное количество версий одной программы, и все будут работать
Я бы обмазался чрутами, лёгкой виртуализацией и прочими системными сендбоксами. Так как-то всё надёжнее, прозрачнее, понятнее. Линупсоядро живёт совершенно отличной от лиспового мира жизнью, скрещивать ужа с ежом дело занятное, наверное, но пользоваться такими гибридами у меня лично чот желания нет особого. Перекатиться на MIT CADR на FPGA и допиливать её изнутри - вот это было бы здорово, об этом я последнее время обильно мечтаю.
>> No.49355 Reply
Посмотрел я тут недавно, короче, на эти ваши лиспы. Всегда до последнего думал, что это толстота, а оказывается, на этом (на первый взгляд) вполне можно писать. Я на перле когда-то такую хуйню делал, а тут она выглядит естественнее. Интересно.
Теперь встал вопрос, с чего же, собственно, начинать. Серьёзно, ведь вашего лиспа хуева куча диалектов и каждого хуева куча имплементаций.
А ещё все книги устарели минимум на 10 лет. Это же пиздец! Я не знаю, наверное, за эти годы/десятилетия что-то менялось, как минимум, завозили новые фичи в диалекты, обновлялась экосистема.

Короче, подытоживая:
1) Расскажите, какие есть диалекты из современных ещё незаброшенных. Преимущества и недостатки каждого вкратце.
2) Страшно ли, что книги в основном вышли десятки лет назад и стоит ли их сегодня читать?
3) Есть ли централизованный репозиторий с либами, а-ля npm, cpan и подобные?
>> No.49356 Reply
>>49355
> А ещё все книги устарели минимум на 10 лет. Это же пиздец!
> 2) Страшно ли, что книги в основном вышли десятки лет назад и стоит ли их сегодня читать?
Конкретно про лисп не скажу, но вообще некоторые вещи в некоторых языках не устаревают. Ты вообще на чем обычно программируешь? Я вот например пишу на Си под контроллеры. И если взять известную книгу по Си: K&R "The C Programming Language" - оригинал издан 1978 - по ней до сих пор изучают этот Си, и ничего там сильно существенно сильно не изменилось в самом Си (добавили некоторые несущественные фичи, которые по пальцем пересчитать можно). Хотя наверняка в каких-то более попсовых языках там через каждый месяц надо что-то новое перечитывать чтоб быть в курсе новой фигни, которая взбрела кому-то там из разрабов языка
> 3) Есть ли централизованный репозиторий с либами, а-ля npm, cpan и подобные?
https://www.quicklisp.org/beta/
>> No.49357 Reply
>>49356
> Конкретно про лисп не скажу, но вообще некоторые вещи в некоторых языках не устаревают.
Всё равно мучает подсознательное ощущение, что если что-то не обновлялось более трёх-четырёх лет, то этим лучше не пользоваться.

> Ты вообще на чем обычно программируешь?
На ноде.
>> No.49359 Reply
>>49355
Емаксом пользуешься? Тогда в первую очередь елисп пробуй, профиты моментальны.
> хуева туча
Не совсем так. CL более-менее один, а вот реализации Scheme оче сильно отличаются. Начинать-потрогать можешь с какой-нибудь scheme с лиспомакросами (Racket , Guile, Chicken два последних относительно хорошо скрещиваются с сишечкой, по крайней мере со стороны сишечки, есть опыт скрещивания loudmouth и guile), а когда привыкнешь, можешь перекатиться на CL.
Есть ещё Clojure, но это веселье в своей отдельной категории, лучше сначала ознакомиться хотя бы с одним из двух основных, чтобы смотреть на него с долей иронии. Как, собственно, и на всякие Hy с LFE.
Книги-то могли много когда выйти назад, но манулы живы и обноаляются.
Алсо, может тебе это всё и кажется старым, но всякие штуки из лиспа до сих пор не смогли перетянуть в мейнстрим. Обратно же это делается за дни.
У емакса есть marmalade и elpa/melpa, за cl тебе пояснили, у схемок было две потуги по запилу кросссхемного репозитория и одна кросс-библиотека, не сложилось. Ищи в репозиториях конкретной схемки, языковые фичи объявляют в SRFI, ну и с такой-то матерью чужой код можно красть и портировать. Но на схемке ничего особо крупного, увы, нет.
>> No.49374 Reply
> Теперь встал вопрос, с чего же, собственно, начинать. Серьёзно, ведь вашего лиспа хуева куча диалектов и каждого хуева куча имплементаций.
Начинай с Common Lisp'а или со Scheme.

С CL всё просто -- берёшь любую реализацию, которая есть для твоей системы, и вперёд. Они все соответствуют одному стандарту.

Схему придётся повыбирать, да. Если решишь начать со схемы, то читай сразу SICP. (Если начнёшь с CL, то SICP всё равно когда-нибудь стоит почитать.)

Ну ещё Racket есть, который начинал как диалект схемы, но сейчас уже я бы его воспринимал как самостоятельный язык.

> А ещё все книги устарели минимум на 10 лет.
Ничего они не устарели. Это тебе не фронтенд на js, где каждые полгода всё устаревает и нужно переучиваться. В общелиспе вообще всё стандартизовано и с 94-го особо не менялось. Библиотеки новые если только изучать.

На вот тебе ссылку на весьма свежую статью о том, как подступиться к изучению общелиспа: http://stevelosh.com/blog/2018/08/a-road-to-common-lisp/
>> No.49386 Reply
Зачем
(let ((вот здесь)))
нужны скобки, тем более две? set и defvar работают и без них.
>> No.49387 Reply
>>49386
Список списков.
>> No.49390 Reply
>>49357
Scheme и любой другой лисп обновляется каждый месяц, если не чаще.
Его "обновить" можешь ты сам запилом макроса.
>> No.49391 Reply
>>49387
Это чтобы можно было задефайнить несколько переменных одним вызовом?
>> No.49392 Reply
>>49391
Ага.
>> No.49402 Reply
>>49392
Всё равно пара скобок лишняя. И вообще, это же макрос, можно было и поудобнее синтаксис выдумать, как это сделано с циклами. Кто-то уже запилил?
>> No.49403 Reply
>>49402
Ничего не лишнее, кури маны, штоле.
>> No.49404 Reply
>>49402
Исходники у тебя есть. Перепиши интерпретатор.
>> No.49409 Reply
>>49403
Я говорю не о синтакс ерроре в сниппете выше (его там нет, я знаю), а о довольно хуёвом дизайне самой функции, если ты не понял. В чём была проблема сделать возможным делать
(let (foo "bar") (baz "qux"))
вот так? Зачем ещё одна пара скобок вокруг списков?
Можно ли сделать по-другому и если нет, то почему, а если да, то сделал ли уже кто-то обёртку?
>> No.49410 Reply
>>49409
У него два параметра - список переменных, и тело функции. Как по-другому сделаешь?
>> No.49411 Reply
>>49410
Итерируешься по всем аргументам, кроме последнего - это твои биндинги. Последний - это тело функции. А let всё равно или макрос или сахар для лямбды, так что никаких проблем тут нет. Но я бы сделал так (let (name1 expr1 name2 expr2 ... nameN exprN) body). И вообще, посмотри на ребол.
>> No.49475 Reply
>>49409
Затем, что обычно ты словари представляешь в виде alist-ов, они же списки списков или пар.
Сделать вот так было бы не очень хорошо, потому что для соблюдения консистентности тебе пришлось бы раздеть и lambda с прочими формами (lambda x y (+ x y)) и забыть про автоматический begin/progn.
Кое-где мне приходилось видеть синтаксис на сплющенных plist-словарях навроде >>49411 , но plist - это не первое, что я думаю, когда слышу слово "словарь".
>> No.49498 Reply
Некромант неистово врывается в тред

На CL есть живой продакшен, да и опенсоус тоже?
CL21 - что за дичь? Стоит смотреть в его сторону?
Жизнь есть? Будущее?
>> No.49499 Reply
>>49498
> На CL есть живой продакшен, да и опенсоус тоже?
Есть, но малопопулярный. Попенсорс только на энтузиастах и держится.
> Стоит смотреть в его сторону?
Если тебе зарабатывать многоденег уже завтра, то нет.
> Жизнь есть?
Есть.
> Будущее?
Жить будет.
>> No.49503 Reply
>>49499
Вот вкатиться бы…
А то обнадёживают почём зря.
Давайте, пиарьтесь, всем доброчаном к вам придём.
>> No.49511 Reply
File: 1483455801018.jpg
Jpg, 66.12 KB, 1198×854 - Click the image to expand
edit Find source with google Find source with iqdb
1483455801018.jpg
>>29402
Каким образом писать в лиспе под винду? Серьезно я некомпетентен поясните куда скармливается код?
>> No.49520 Reply
>>49511
> писать в лиспе
Берёшь «лисп под винду», запускаешь repl, пишешь в нём. Готово.
> куда скармливается код
Компилятору или интерпретатору, как твоя душа пожелает.
> Серьезно я некомпетентен
Ну удачи тебе.
>> No.49521 Reply
Пользуюсь опенбоксом, запилил себе динамическое меню с выводом книг:
https://paste.debian.net/1099658/
Как хотите, но генерировать xml просто, если sxml принять. Я не уверен, что смог бы так где-то ещё без каши строк и эскейпов.
Другое дело в том, что сам комплект sxml особо не поддерживается и с догументацией немого туго (ну не понимаю её я, а читать исходники Киселёва не доходят глаза).

Скрипт, конечно отвратительный, не отвратительно я писать не умею.
>> No.49534 Reply
>>49521
Человека, который знает и использует схему для личных скриптиков, пинать нога не подымается, ты уж прости. А использование sxml и упоминание Олега даже побуждает меня усомниться в скорой гибели человечества.

Прости, расчувствовался. Просто я только что с лора, где какой-то очередной скрипт-кидди требовал написать за него элементарный трёхстрочный скриптик на шелле.

По твоему коду:

Почему import, а не use-modules?
https://www.gnu.org/software/guile/manual/html_node/Using-Guile-Modules.html

Относительно списка файлов в директории, посмотри модуль (ice-9 ftw). Я использовал scandir оттуда.
https://www.gnu.org/software/guile/manual/html_node/File-Tree-Walk.html

Для вытаскивания последних n символов из строки у guile есть функция string-take-right, может тебе подойдёт.
https://www.gnu.org/software/guile/manual/html_node/String-Selection.html
>> No.49535 Reply
>>49534
> Почему import, а не use-modules?
Потому что import есть везде, а я изредка пытаюсь скакать со схемы на схему. Особенностей я не знаю, как и SRFI.

Спасибо за наводки.

SXML я таки до конца не умею (надо уметь в ssax, sxpath и так далее), а из схемы читался только r5rs.
>> No.49536 Reply
>>49535
Я тоже скачу. Не так давно перескочил с guile на chicken. И понял, что пытаться сохранять совместимость -- гиблое дело. На чистом R5RS писать всё равно не получится, а библиотеки (кроме тех, которые реализуют SRFI) часто разные. Так что, хоть и с минимальными изменениями, но переписывать нужные скрипты пришлось.

SRFI читать пытаюсь, по мере возможности. Всё-таки, что-то общее между разными реализациями. Да к тому же SRFI интересно читать ради идей.

R5RS и R7RS-small распечатаны и под рукой валяются, а вот в R6RS лезть не хочу. Не нравится мне, что при его разработке попытались отбросить наработки сообщества (как раз те, которые в SRFI) и сделать всё по-своему.

А SXML я сам использовал по минимуму, когда захотелось парсить RSS.
>> No.49538 Reply
Лисперы, скажите, почему ещё никто не сделал 100% кириллический лисп? Его же проще всего перевести на русские ключевые слова. Или я плохо искал?
>> No.49539 Reply
>>49538
А зачем его делать? Кто на нем будет писать? Один неадекват с ЛОРа помню делал какой-то русский лисп или типа того. http://программирование-по-русски.рф/яр.яргт/
>> No.49543 Reply
>>49539
just for lulz? Пока не сделаешь, неясно кто будет писать.
>> No.49545 Reply
>>49543
Тут общей базы aka r7rs-big для той же схемы нет и вряд ли будет, фреймворков для общелиспа три с половиной калеки, питонисты с рубистами и джава(скриптеро)гошниками заваливают поле зрения вообще всем посонам, пропихивая гротескно-уродивые архитектурные и не совсем решения зато читаемо, не то, что ваши скобки!!!111, а ты тут решил rусскийлисп делать.
>> No.49546 Reply
>>49545
Ничем не хуже того, что ты перечислил. Назови пару архитектурно верных платформ, которые подойдут под эту задачу лучше всего по твоему мнению? Общелисп и sbcl кажутся излише перегруженными, а схема - излишне хипстерской. В лиспе нюфаг, не хочу запороть.
>> No.49548 Reply
>>49546
Ты 1С когда-нибудь видел?
>> No.49549 Reply
>>49548
При чём тут 1С?
>> No.49550 Reply
>>49549
При том, что там русский синтаксис. Посмотри, проблюйся.

Русский язык из-за кучи словоформ вообще мало приспособлен для кодинга. Ну и из-за нулевой распространённости снаружи РФ (пост-СССР уже забыл, не считая славян и казахов).
>> No.49551 Reply
>>49546
Вообще пофигу, берёшь и шлёпаешь define'ы и макросы-синонимы. Можно под это дело написать макрос, разворачивающийся в макросы, делающие синонимы для функций и спецформ. С каким-нибудь loop и формами, где есть англослова внутри, стоит повозиться отдельно, конечно же. И с функциями, принимающими символы.
>> No.49552 Reply
>>49546
> схема - излишне хипстерской
Ты вообще хипстера в лиспотредах окромя кложуристов и тому подобных, пришедших со стороны Java, видел?

Хайпа ноль же. Ноль.
>> No.49553 Reply
>>49551
>>49552
Я же говорю что нюфаг, поэтому и спросил. Может быть перепутал схему и кложу. Читал пару книжек завлекательных, пишут красиво, пару строк написал, но перейти пока не удалось, весь этот зоопарк, тяжело найти что-то подходящее. Вообще изначально байтоёб, так что хочу байтоёбский императивный, но лисп. Есть идеи? И define-ы вроде не везде возможно нашлёпать, тот же loop, который ты привёл.
>> No.49554 Reply
> loop
в кишки интерпретатора не хотелось бы лезть раньше времени
>> No.49555 Reply
Да, насчёт хипстеров, мне современный кодинг вообще абсурдом кажется, единственный лиспер с которым общался ирл был имаксер, вот по нему и сужу. Пытался потом на имакс-лиспе что-то поковырять, но зачем мне мегабайты имакса в довесок к интерпретатору?
>> No.49556 Reply
>>49553
На тебе лиспомакрос на схеме, который делает синонимы, только чуть-чуть переделать для cl:
(define-macro (synonym old new) `(define-macro (,new . args) `(,',old ,@args)))
Мне не приходилось писать макросы больше одного уровня, поэтому про то, как прокинуть unquote на уровень вверх, я не вполне знаю. И не совсем понимаю, как у меня заработал кусок с ,',old .Подозреваю, что внутренний quasiquote берёт первый unquote для себя, а про то, что там внутри, особо не интересуется; ну и quasiquote, как только видит quasiquote внутри, перестаёт им заниматься и уходит в себя. Я даже описать это не могу.

> но перейти пока не удалось
Вряд ли удастся именно перейти раз и навсегда. Поле непаханое. Батареек кот наплакал. Хотя ты можешь играть с FFI и скриптовать свою байтоеблю. FFI у некоторых реализаций относительно простой.
> Вообще изначально байтоёб
Я вот хочу стать байтоёбом. Но надо много читать и много практиковаться. Это трудно.
> байтоёбский императивный, но лисп
Это смотря что ты назовёшь лиспом. Где-то был транслятор из s-выражений в C++. Ты сам такой можешь сделать. Ещё где-то были ассемблеры на s-выражениях.
Можешь залезть в кишки и добавить DSL для байтоебли, ты же байтоёб, что тебе стоит. Или на макросах и массивах сделать пародию на байтоеблю, раскрывающуюся в лиспокод. Это, конечно же, труднее. У меня были больные мысли на эту тему.
Можешь и свой собственный язык на s-выражениях сделать. Но не сделаешь.

А так-то байтоёбский лисп по сути оксюморон, если не копать.
> И define-ы вроде не везде возможно нашлёпать, тот же loop, который ты привёл.
loop обернуть можно, если потыкать макрос, который запиливает макрос synonym. Просто пройтись в лупе по аргументам макроса и, если видно такое-то слово, заменять его на исходное. Ни в какие >>49554 кишки лезть не надо. И у тебя там, если у тебя SBCL, всё-таки там компилятор внутри.

>>49555
> Да, насчёт хипстеров, мне современный кодинг вообще абсурдом кажется, единственный лиспер с которым общался ирл был имаксер, вот по нему и сужу. Пытался потом на имакс-лиспе что-то поковырять, но зачем мне мегабайты имакса в довесок к интерпретатору?
> мне современный кодинг вообще абсурдом кажется
С какой стороны?

Ты общаешься с ньюфагом емакса. Задавай свои ответы. На елиспе ковырялся только конфиг.
Вообще, я не знаю, как емаксера с дефолтным емаксом можно только за емакс назвать хипстером. Доля исчезающе маленькая, хайпа нет, основная масса всё равно сидит на IDE, изредка поглядывая в vim и nano.
> но зачем мне мегабайты имакса в довесок к интерпретатору?
Затем, чтобы код вызывать из емакса, очевидно же, это же dsl. Без емакса интерпретаторы елиспа таки есть, только смысла в них нет.
Нет, ты можешь, конечно, сделать из емакса веб-сервис…
>> No.49557 Reply
>>49553
carp

+ ащкер\фактор
>> No.49558 Reply
File: evangelion-3.jpg
Jpg, 179.83 KB, 850×630 - Click the image to expand
edit Find source with google Find source with iqdb
evangelion-3.jpg
>>49555
> мегабайты имакса в довесок к интерпретатору
Самое там пiчальнає — то, шо имакс-лисп работаєт с глобальными переменными (именно так в ём зделонны параметры по умолчанию, те, что «захватываются» из взывающей функции). Ужос, ведь уже XXI век на дворе.
>> No.49559 Reply
>>49556
Спасибо за развёрнутый ответ и макрос.

> хочу стать байтоёбом
Там если так подумать всё более менее просто, но да, трудно, нюансы всякие переполнения там и т.п. Могу удачи пожелать если надо.

> абсурд с какой стороны?
Ну вот эти все скриптовые языки, зоопарк этот, особенно в вебе. Слишком динамично всё по сравнению с классическими императивными языками типа С.

> за емакс назвать хипстером
Ну я может как-то не так понимаю, но редактор, где для перемещения нужно использовать C+p C+n вместо стрелок или vim-like это за гранью моего понимания. Настолько неюзабельное можно разве что ради позерства использовать. Просто ещё елисп - это не совсем лисп, тоесть это примерно как лисп в автокаде. Тоесть писатель на елиспе это как бы не совсем лиспер. Мне хотелось бы отдельный интерпретатор.

> транслятор из s-выражений в C
Да, видел чикен, но не слишком впечатлил. Да, можно что-то своё сделать, но я уверен, кто-нибудь решал аналогичные задачи, нужно только получше поискать.

> Без емакса интерпретаторы елиспа таки есть
Дык мне не обязательно елисп нужен, я не знаю какой мне нужен. Просто елисп тыкал ради интереса дольше всех.

> Батареек кот наплакал
Смотря к чему, наверняка схема какая нибудь достаточно старая, чтобы обрасти батарейками. Но мне бы базу хотябы нормальную, с минимальными наворотами, но надёжную. В идеале какой нибудь интерпретатор простейшего диалекта, можно даже без макросов, но чтобы простой, компактный и переносимый между win32/linux, но не поделку хабрастудентов, чтобы можно было разобраться как оно работает внутри и доработать несложно.
>> No.49560 Reply
>>49557
Хорошо, посмотрю. Выглядит обещающе A statically typed lisp, without a GC, for real-time applications, но не очень This is a research project and a lot of information here might become outdated and misleading without any explanation. Don't use it for anything important just yet!.

Форты совсем другая тема.
>> No.49561 Reply
Охё, оно carp на хаски. Нет, шизики не нужны, пожалуй.
>> No.49562 Reply
Весь интернет забит статьями/книгами/туториалами про написание своего наколеночного лиспа за вечер. Хотел бы, давно бы нашёл и сделал.
>> No.49563 Reply
>>49562
Читал, там на выходе получается какое-то нечто типа homelisp, которе представляет разве что академический интерес типа я пилю интерпретатор а потом запилю статью на хабр и стану популярным, ололо, ну маааам, я ещё не хочу кушать. По крайней мере мне именно такие статьи попадались, когда искал.
>> No.49566 Reply
>>49563
Тебе же разобраться надо? Ну и делаешь, как у них там написано, получаешь свой недолисп и долго и муторно доделываешь его. Или как ты думал, программирование работает? Ну, а если ты из тех дурачков, кому проще разбирать реальный проект, а не специально сделанный для обучения, то опенсурсных лиспов и схем тоже навалом - тот же гамбит.
Скорее всего, тебе хочется языком подвигать и изобразить деятельность, а не делать что-то.
>> No.49567 Reply
>>49566
Может ты и прав отчасти, иначе зачем я бы на чанах сидел? Аригато в любом случае.
>> No.49568 Reply
>>49566
Просто есть же стандарты. Если низкоуровневое программирование, то С, если автоматизация, то shell, думал может что попадётся похожее из лисп среды, максимально классическое. sbcl не зашёл.
>> No.49569 Reply
>>49559
> Ну я может как-то не так понимаю, но редактор, где для перемещения нужно использовать C+p C+n вместо стрелок или vim-like это за гранью моего понимания.
Просто надо руку набить. Или забиндить, где-то вот автоматом раздают бинды стрелок куда надо. У меня в емаксе автоматом есть стрелки.
C-p, C-n — они в любой программе на readline есть, как и в твоём шелле.

> Ну вот эти все скриптовые языки, зоопарк этот, особенно в вебе. Слишком динамично всё по сравнению с классическими императивными языками типа С.
Ну так раз-два-и-готово. Веб такой. Против моды идти трудно. Лисп, как бы сказать, тоже в некотором коде динамический и, не побоюсь сказать Guile, Tinyscheme, скриптовый язык.

> Настолько неюзабельное можно разве что ради позерства использовать.
Пользуюсь на мобильнике, где стрелок нет.

> Мне хотелось бы отдельный интерпретатор.
guile, kawa. Оба с поддержкой елиспа как языка. Насколько хорошая, не знаю, но на guile давным-давно регулярно кто-то пытается взгромоздить емакс, чтобы заменить старый елисп на новый. С переменным успехом.
> Дык мне не обязательно елисп нужен, я не знаю какой мне нужен. Просто елисп тыкал ради интереса дольше всех.
Особых, коренных различий между лиспами ты с первого чиха не заметишь.

> как бы не совсем лиспер
Совсем лисперов тут вообще нет, причина вполне себе известна.

> Да, видел чикен, но не слишком впечатлил.
Чикен — транслятор из scheme в C. Мной имелся в виду тот же Си, но на скобках. Таких поделок-недоделок sc, sxc, вот это всё, равно как и ассемблеров на скобках, тьма тьмущая, но есть фатальный недостаток: большая часть всего этого не является ъ-компиляторами. Просто игрушки, склеивающие строки из скобочек, кодогенераторы. Ценность бы имел настоящий компилятор C на скобках, к которому потом можно было бы приделать сбоку парсер настоящего C без скобок. То есть, компилятор с возможностью играть снаружи с AST и подавать сразу его.

> Смотря к чему, наверняка схема какая нибудь достаточно старая, чтобы обрасти батарейками.
Тыжбайтоёб. Сам напишешь. У меня для тебя схемы, где очень много батареек и ни одной не пропущено, нет. В одной есть то, в другой есть это, а того и этого в одной нет. Можешь Kawa потыкать, но там интероп с Java.
Так-то можешь посмотреть описания фич и FFI ко всяким-разным. У многих старых схем батареек нет.
Со стороны CL есть аж два универсальных пакета FFI, которые много где можно завести. Можешь посмотреть и туда, особенно учитывая то, что стандарт языка как таковой шире и такого разброда с шатанием нет. Батареек там тоже больше и они больше про императивность на самом деле рекомендуют писать функциональный код, но оптимизировать его будет не компилятор, а ты, заменяя функциональные примитивы императивными там, где это можно сделать.
SWIG в нынешнем, последнем состоянии умеет в Guile и Racket, CFFI/UFFI из CL выпилили, равно как и вывод в s-выражениях, которым почему-то никто не пользовался. Печально это всё.

> В идеале какой нибудь интерпретатор простейшего диалекта, можно даже без макросов, но чтобы простой, компактный и переносимый между win32/linux
Максимально вот это — tinyscheme/chibischeme. За chicken, guile, gambit и racket разбирайся сам. Там особой простоты и компактности уже нет, но есть хоть какие-то батарейки.
>> No.49570 Reply
>>49558
Надо переводить емакс на елисп из guile, может там они сделали всё как надо. Я про треды, которых давно не было и на отсутствие которых полагаются многие хаки, например.
> то, шо имакс-лисп работаєт с глобальными переменными (именно так в ём зделонны параметры по умолчанию, те, что «захватываются» из взывающей функции
Это ты так называешь dynamic scoping по умолчанию?
>> No.49571 Reply
>>49561
Ты полез пользоваться лиспом, а теперь что-то катишь на хаскель. Не надо так. Ешь что дают или пиши сам. Программистов на функциональщине и лиспах исчезающе мало.
>> No.49572 Reply
File: no.jpg
Jpg, 21.04 KB, 604×338 - Click the image to expand
edit Find source with google Find source with iqdb
no.jpg
>>49566
> Ну и делаешь, как у них там написано, получаешь свой недолисп и долго и муторно доделываешь его.
Чтобы долго и муторно его доделывать, надо долго и муторно его пилить. Тебе же из всех вариантов написания своего лиспа в голову первым сам не придёт тот самый лисп за один вечер? Не придёт.
>> No.49573 Reply
>>49568
> то shell
А есть schemeshell.

> из лисп среды, максимально классическое
А кто тебе сказал, что лисп должен быть на кого-то похож и быть классическим по твоим ожиданиям?
>> No.49575 Reply
>>49571
Прости, не хотел ничего катить на хаскель, просто не люблю, когда мне суют под нос маргиналов. Хаскель не подойдёт, потому что это лишняя зависимость.

Мне интересно ознакомиться с полным ассортиментом, чтобы можно было выбрать что-то, а не есть первое попавшееся.

>>49572
Не понял посыла.

>>49573
А я и не говорю что он должен, я описываю требования к тому, что хочу найти, и предполагаю что вероятность нахождения этого выше нуля из-за того, что лиспов разных очень очень много. Написать своё всегда успеется.
>> No.49576 Reply
>>49573
> schemeshell
Не понимаю, почему для win32 его собирают через cygwin, когда исходники на схеме?
>> No.49577 Reply
>>49572
Если, например, я хочу разобраться, как сделать свой лисп, то придёт. А пиление до промышленного состояния - это нефундаментальная косметика, требующая только свободного времени.
>> No.49578 Reply
>>49573
> schemeshell
И ещё, чтобы не откладывать в долгий ящик, знаешь что-нибудь подобное на других диалектах?
>> No.49579 Reply
>>49576
Потому что шелл скорее всего с fork, которого в win32 нет, а последние версии mit/gnu scheme >We no longer support OS/2, DOS, or Windows.
Сам код давнишний и его выпилили из guile, потому что им там что-то не нравится. На самом деле, не хотят поддерживать в главном дереве.
>> No.49580 Reply
>>49578
Нет. Разве что взглянуть на исходники и перевести. Не взлетел он, вся движуха давно угасла, а пиарить его не пиарили.
Сам mit/gnu scheme выглядит довольно угасшим проектом, хотя в нём есть поддержка лиспообразов, которых в схемах, которыми я пользуюсь, нет. В CL поголовно почти должна быть.
>> No.49581 Reply
>>49580
> схемах, которыми я пользуюсь
А ты чем пользуешься, на что взглянуть посоветуешь? Чтобы можно было хоть какие нибудь задачи на лисп перевезти.
>> No.49582 Reply
>>49559
> Ну я может как-то не так понимаю, но редактор, где для перемещения нужно использовать C+p C+n вместо стрелок

Почему "нужно"? Используй стрелки, если тебе так нравится.

Другое дело, что большинство людей, владеющих слепой десятипальцевой печатью (а это владение даёт +100 к комфорту работы за компом) и пользующихся емаксом или vi, скажут тебе, что стрелочки -- это неудобно. И будут правы.

Ну и да, у тебя какое-то своё, отличное от общепринятого, понимание хипстерства в IT.
>> No.49583 Reply
>>49582
Ну да, C+p C+n видимо удобно, если умеешь 10-пальцевый ввод, который я так и не освоил. Да и не в редакторе дело.
>> No.49584 Reply
>>49581
Я лично не пользуюсь ничем, только с guile играю время от времени. С переменным успехом.
>> No.49585 Reply
>>49584
Можешь что нибудь посоветовать, чтобы лучше понимать, что из себя представляют стандарты типа R4RS R5RS R6RS R7RS, зачем столько, в чём между ними разница?
>> No.49586 Reply
>>49585
По идее, это должны были быть последовательные этапы развития языка. Но R6RS многим не понравился, произошёл раскол в сообществе. В результате сейчас параллельно актуальны и R5RS, и R6RS, и R7RS, который ещё не закончен и, по идее, должен их как-то примирить.

Практически все реализации полностью поддерживают R5RS. Изучи для начала его, это всего 50 страничек.

R4RS уже точно неактуален.

>>49581
Я использую Guile и Chicken. Скрипты для себя на них пишу.

другой Доброкодер
>> No.49587 Reply
>>49586
> Guile и Chicken
Я смотрю это довольно популярная штука. Лучше пайтона?
>> No.49588 Reply
>>49587
Во-первых, у меня слишком много претензий к пайтону. Во-вторых, мне нравятся идеи лиспа. Этих двух причин уже достаточно, чтобы лично для меня ответ был очевиден -- лучше.
>> No.49589 Reply
>>49588
Понятно. Есть ли претензии к кодогенератору чикена?
>> No.49590 Reply
Так...

> (use (chicken file))
Error: invalid extension specifier: (chicken file)
> (import (chicken file))
Error: (import) during expansion of (import ...) - cannot import from undefined module: file

Это всё из-за win32?
>> No.49591 Reply
>>49590
Возможно, что и из-за win32.

Но для начала убедись, что твой мануал/тьюториал соответствует версии твоего интерпретатора. Между четвёртой и пятой версиями Chicken поменялся синтаксис подключения модулей.
>> No.49592 Reply
>>49589
У меня претензий нет. Но у меня и каких-то особых требований к кодогенерации тоже нет. Работает, генерит компилируемый сишный код, можно делать полностью статические бинарники.
>> No.49593 Reply
>>49591
Ну началось, блэт ... у меня v4
>> No.49594 Reply
Не ной, вот тебе дока к четвёртому: http://wiki.call-cc.org/man/4/The%20User's%20Manual И беги с винды, если можешь. Она плохо подходит для разработки, тем более на всякой экзотике вроде схемы.
>> No.49595 Reply
> вся суть оперсорс, все поломано, и всем пофиг
>> No.49596 Reply
>>49594
Всё, разобрался методом тыка. Мог бы подсказать между прочим, что то, что мне нужно лежит в (use posix), я же первые шаги только делаю. Надо наверное было поискать сборник примеров вместо того чтобы мануал открывать.

Насчёт бегства готов обсудить, если есть варианты, но видимо не в этом разделе. Правда столько копий уже на эту тему сломано, что уже и не надеюсь найти что-то вменяемое.
>> No.49597 Reply
Я вас распугал? Неужто я стал токсичен о_О?
>> No.49598 Reply
>>49597
Я тут. Могу обсуждать схему.

Если это >>49596 был ты, то не то чтобы токсичен, но резковат местами. Например, твой упрёк
> Мог бы подсказать между прочим
выглядит необоснованно. Мог бы задать конкретный вопрос, а не упрекать меня в том, что я сам не догадался, что именно тебе нужно.

Как идёт освоение схемы?
>> No.49599 Reply
File: chaj.jpg
Jpg, 62.55 KB, 500×266 - Click the image to expand
edit Find source with google Find source with iqdb
chaj.jpg
>>49598
Привет. Да, немного резковат был, прости.

Вообще, благодарю всех участвовавших в обсуждении.

Освоение идёт, честно говоря, никак. Попробовал немного, пособирал чикен из исходников. Потыкал примерчики. В 5 версии есть какие-то существенные с практической точки зрения отличия? Другими словами, имеет ли смысл гнаться именно за 5 версией, или вполне можно на 4 сидеть?
>> No.49600 Reply
>>49597
> The Largest Disservice to LISP is most frequently done whenever a LISP advocate opens his/her mouth. LISP advocates have been, in my limited and biased experience, some of the most arrogant and condescending bastards in the world.
Тут по большему счёту все такие и, возможно, ещё хуже. Говорю за себя, но примеры есть и про других. Поищи персонажа по имени "Золотце", это лиспер с нульчана. Его гитхабчика и прочих днявок я не упомню, найдёшь сам.
Так как мы на доброчане, надо поступать так, как надо.

>>49599
> 5 версии
Там разницы никакой, кроме того, что в пятой будут ломать совместимость и это в целом бета/development. В последний раз, как туда смотрел, яиц на пятую версию было очень мало.
Вообще, ядро языка у тебя, грубо говоря, изложено на сорока-пятидесяти страницах R5RS. Его никто менять не будет. Всё остальное будет забываться, падать, не находиться и так далее. Но вряд ли в пределах одной имплементации кто-то сломает мир. Такое было, но с racket и потому, что библиотека, которую мне хотелось потрогать, была завязана на байткодоспецифичные вещи, в общем, в кишках и не отвязать. Другую библиотеку, вроде, не портировали, потому что куда-то делся разработчик.

Смотрю сейчас и вижу, что пятая версия теперь дефолт. У меня четвёртая. Ну что тут поделать… Отомрёт со временем, наверно. Когда-нибудь.

>>49596
> Мог бы подсказать между прочим, что то, что мне нужно лежит в (use posix)
Noone cares. Ты вот не сказал, что конкретно тебе нужно, я как-то курицей пользовался и твоё (chicken file) мне вообще ни о чём не говорит.
(call-)with-input-from-file, open-input-file и тому подобное по минимуму есть везде и ничего импортировать для этого не нужно. Расскажи хоть, за чем ты туда полез.
А, вижу, там вообще всё.
>> No.49601 Reply
>>49599
> В 5 версии есть какие-то существенные с практической точки зрения отличия?
Да я, честно говоря, и не знаю. Сам начинал сразу с 5-й, поэтому сравнить не могу.
> Другими словами, имеет ли смысл гнаться именно за 5 версией, или вполне можно на 4 сидеть?
Гнаться, может, и не надо. Но из общих соображений, при возможности выбора, я бы пользовался 5-й. 4-я -- легаси, со всеми вытекающими.
> Освоение идёт, честно говоря, никак.
Найди какую-нибудь практическую задачку. Я себе всякие скрипты пишу. Например, для парсинга файрфоксовских закладок, или для выкачивания списка станций с somafm и сохранения их в .m3u, или для парсинга RSS с horriblesubs и выдачи мне списка новенького из того, что я смотрю. Ну и т.п.
>> No.49602 Reply
>>49601
Да я щас другими вещами занимаюсь inb4 прокрастинацией.
Ты говорил guile ещё используешь. Чикена не хватает на что-то?
>> No.49603 Reply
>>49602
Чикена пока хватает на всё. Guile я пользовался раньше, пока не перекатился на чикен.

Предвосхищая твой вопрос, guile тоже хватало на всё. Но мне нравится, что с чикеном я могу скомпилить статический бинарник, который будет работать до скончания веков^W^W^W, пока сисколы в ядре не поменяются. А то с guile был эпизод, когда пришлось скрипт переписывать из-за изменений в JSON-либе. Ну и в целом, в чикене, по ощущениям, библиотек побольше.
>> No.49604 Reply
>>49603
Понял, логично.
>> No.49605 Reply
>>49603
А у меня другая история. Курицу пробовал пару раз. Успехов, в общем-то, у меня не было нигде особых.
Библиотек мало везде, статического бинарника в курице я не видел, может, плохо искал. При обновлении системы бинарник слетел с ошибкой линковки.
В guile сырые и бажные библиотеки и особо не пытаются припилить компилятор, хоть и есть какие-то потуги в JIT. Зато за ним куча людей из Guix, которые наконец-то начали осваивать просторы. Может, до чего-то дойдут.
Меня смущает курица отсутствием нативных тредов. Про лёгкость линковки с C вручную в сравнении с Guile я сказать ничего не могу, Guile мне хватало, а отсутствие нативных тредов в чикене меня немножко так в этом отношении смущает. Может и запилили нативные на пятой версии? Там где-то была схема по принципу компиляции Chicken с нативными тредами, но имя не помню. А, вот оно:https://justinethier.github.io/cyclone/
> библиотек побольше
Тут в любом случае надо возиться с FFI. И лучше бы портировать из лиспа CFFI с UFFI или делать все на SWIG. Несколько проектов FFI уже было и померло, последний было видно несколько лет назад.
>> No.49606 Reply
>>49605
Из всего своего опыта знакомства с open-source я понял онду вещь. Штуки делятся на те, которые работают для тебя и те которые разваливаются, и это зависит от человека, тоесть одному одно заходит, другому - другое. В моих руках например разваливается почти всё.

В guile не верю, они там в GNU все шизанулись кмк. Но если тебе заходит, то норм. Чем больше опыта - тем лучше.

> потоки
Чем pthreads не устраивают?

> лучше бы портировать из лиспа CFFI с UFFI или делать все на SWIG
Почему лучше?
>> No.49608 Reply
>>49605
По поводу статической линковки:

/tmp $ csc somafm.scm
/tmp $ du -sh somafm
47.0K somafm
/tmp $ objdump -p somafm | grep NEEDED
NEEDED libchicken.so.7.0
NEEDED libm.so.10.1
NEEDED libpthread.so.26.1
NEEDED libc.so.95.1

/tmp $ csc -static somafm.scm
/tmp $ du -sh somafm
6.8M somafm
/tmp $ objdump -p somafm | grep NEEDED
NEEDED libm.so.10.1
NEEDED libpthread.so.26.1
NEEDED libc.so.95.1

/tmp $ csc -static -L -static somafm.scm
/tmp $ du -sh somafm
8.2M somafm
/tmp $ objdump -p somafm | grep NEEDED
/tmp $

В первом случае либы чикена линкуются динамически. Причём не только сам libchicken.so, но и модули (через какой-нибудь dlopen, наверное). Если я убираю, например, `http-client*.so` из `CHICKENREPOSITORYPATH`, то бинарник работать перестаёт.

Во втором случае чикеновский рантайм и либы линкуются статически, но системные либы по-прежнему линкуются динамически. Естественно, если при обновлении системы они поменяются, то бинарник перестанет работать.

В третьем случае бинарник слинкован полностью статически. `-L <опция>` означает "передать <опцию> сишному компилятору".
>> No.49609 Reply
>>49605
>>49606
Ну а для меня chicken .vs. guile -- это ещё и R5RS+SRFI .vs. R6RS. И тут я на стороне R5RS.
>> No.49610 Reply
>>49608
> csc -static somafm.scm
> NEEDED libc.so.95.1
> если поменяются, то бинарник перестанет работать

Один вопрос. Что значит поменяются? Как это работает? Как там с совместимостью? Если скомпилировать для более старой системы, запустится ли на более новой? У меня есть пробел в этой области. Можно кратко или ссылкой.
>> No.49613 Reply
>>49610
> Что значит поменяются?
Это значит, что в библиотеке поменялся ABI, вследствие чего её авторы или мейнтейнеры поменяли её номер версии (тот, который ты видишь в имени файла). И теперь, после обновления, у тебя уже нет файла с именем libc.so.95.1, а вместо него, скажем, файл с именем libc.so.95.2.
> Как это работает?
А если файла с таким именем нет, то бинарник, который слинкован именно с этим файлом, естественно, не запустится, поскольку этого файла тупо не найдёт.
> Если скомпилировать для более старой системы, запустится ли на более новой?
Если на новой системе есть все файлы, которые NEEDED, то запустится, иначе нет.

Про ABI можно почитать в википедии (я и сам почитаю, пожалуй): https://en.wikipedia.org/wiki/Application_binary_interface
>> No.49614 Reply
>>49613
Нет, ABI - это немного о другом. Тут вопрос в чём, ведь у libc есть какая-то совместимость со старыми версиями? Иначе это существенно усложнило бы поддержку скомпилированных программ.
Например, если у меня установлена libc.so.95.2, то в ней автоматически есть libc.so.95.1 и предидущие. Ведь файл то у меня в системе - только один libc.so.

Думал может ты знаешь, есть ли совместимость. Потому что я подозреваю что есть, но как она работает - пока не знаю.
>> No.49615 Reply
>>49614
> Тут вопрос в чём, ведь у libc есть какая-то совместимость со старыми версиями?
Если разработчики/мейнтейнеры сменили сменили номер версии либы (не путай с номером версии пакета, если речь о линуксе), значит они считают, что бинарной (то есть, по ABI) совместимости с предыдущими версиями нет. И я склонен им доверять в этом вопросе.

> Иначе это существенно усложнило бы поддержку скомпилированных программ.
Хех. Словосочетание "dll hell" слышал когда-нибудь?

В линуксах и прочих опенсорсных юниксах с этим полегче: всегда можно пересобрать софт, который зависит от библиотеки с изменившимся ABI. В отслеживании такого софта и состоит львиная доля работы мейнтейнеров линуксовых дистров.

> Например, если у меня установлена libc.so.95.2, то в ней автоматически есть libc.so.95.1 и предидущие.
ЩИТО?

> Ведь файл то у меня в системе - только один libc.so.
Если у тебя линукс и там есть файл libc.so, то скорее всего это текстовый файлик, можешь в него заглянуть из любопытства.

А софт в линуксе обычно зависит от какого-нибудь libc.so.6 (который, в свою очередь, скорее всего симлинк на настоящий файл с либой). Если мейнтейнеры эту 6 решат при очередном обновлении glibc сменить, например, на 7, то им придётся пересобирать мир.
>> No.49616 Reply
>>49615
> Если мейнтейнеры эту 6 решат при очередном обновлении glibc сменить, например, на 7, то им придётся пересобирать мир.
Тоесть они получается даже до 95 винды ещё не дошли по технологическому уровню? Не верю, звучит неправдоподобно.
>> No.49617 Reply
>>49616
Вообще-то, выражение dll hell возникло именно на винде и было актуально в первую очередь там.

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

Впрочем, давай не будем про винду. Я последний раз ей более или менее пользовался как раз во времена XP и для обсуждения её сейчас у меня нет ни интереса, ни актуальных знаний. Тем более в треде про лисп.
>> No.49618 Reply
>>49606
> В guile не верю, они там в GNU все шизанулись кмк.
Они в правильном направлении шизанулись, проекты навроде всепоглощающего init'a (не то, что бы я такие любил, но им можно попытаться) с универсальными конфигами и менеджера пакетов обязаны дать людям опыт и принести батарейки с библиотеками. Скриптовать программы лиспом тоже хорошо.

> pthreads
http://wiki.call-cc.org/eggref/5/pthreads
Ну это же не то. Ну не тянет на нормальные треды, учитывая то, что там надо всё либо заворачивать в FFI, либо откровенно сишный код пускать, этот момент для меня немного не прояснён.
> having a C calling convention
говорит в пользу первого, но там и ещё есть на что посмотреть. А
> The threads implemented in CHICKEN are so called "green" threads
из SRFI-18 говорит нам о том, что настоящих тредов в чикене нет.

> это зависит от человека
Не совсем. От предвидения разработчика, например. Хардкод, к примеру.

> Почему лучше?
Потому что вместо кучи разных ffi у тебя два-три совместимых и можно скакать с одной схемы на другую в поисках нужных фич в cyclone есть стратегия компиляции из chicken и нативные треды, а библиотек нет, да и мейнтейнить отдельно ничего не надо. Мёртвый вывод SWIG в s-выражения тут бы подошёл.
Можно не мучиться и плеваться s-выражениями по сокетам, получится жрущий франкенштейн.
>> No.49619 Reply
>>49617
Собственно вопрос был именно в том, как оно реализовано в этих ваших линуксах.
>> No.49620 Reply
>>49619
Как выше и написано — через зависимости. Для этого нужно поддерживать софт в актуальном состоянии.
Причём есть некоторый софт, который тянет с собой статически все необходимые библиотеки. Обычно всякий околокоммерческий.
>> No.49621 Reply
>>49618
> скакать с одной схемы на другую
До этого пока не дошёл. Тем не менее, было бы интересно почитать, какие например есть преимущества у таких штук как CFFI UFFI SWIG перед обычным FFI.
>> No.49622 Reply
>>49620
Уточню вопрос, можно ли поставить две libc в одну систему?
>> No.49623 Reply
>>49620
>>49622
Отмена.
>> No.49624 Reply
>>49621
CFFI и UFFI и есть обычные ffi-библиотеки, просто они поддерживаются практически на всех основных реализациях cl, чего у scheme нет: у каждого своя реализация.

SWIG (грубо говоря) — генератор FFI-привязок из сишных (есть нюансы, это не совсем си) заголовков. Делаешь ему описание и он генерирует батарейки не для одного рантайма, а для нескольких. Сейчас он генерирует код для Guile и Racket. Раньше генерировал под CFFI и UFFI, в четвёртой версии что-то убрали:
> Support for Allegrocl, CFFI, Chicken, CLISP, Modula3, S-EXP, UFFI and Pike was removed in swig-4.0.0.
> In addition to this, the parse tree can be exported as XML.

А ведь можно было бы каждому написать парсер вывода XML.

>>49622
Да хоть десять, это просто библиотека. Если у тебя мультиарч, уже будет по копии на архитектуру. В дистрибутивах просто собирают всё под одну, в этом же суть.
>> No.49625 Reply
>>49624
> cl
Так что всё таки лучше, cl или схемка? На что имеет смысл посмотреть из cl-ей?
>> No.49626 Reply
>>49625
Смотри на любой CL и схему и выбирай сам. За тебя никто не разберётся. Как язык мне больше нравится схема, как платформа cl некоторым образом (то же наличие универсального для реализаций FFI) лучше, в схемах вот о необходимом минимуме не договорятся, выбрал реализацию — живи с ней, по большему счёту. Нет, на CL я по-крупному не писал ни разу, только на схеме. Ну и define-macro всё-таки попривычнее syntax, я ещё не познал от них ту боль, которая действительно должна оправдать гигиенические макросы.

В любом случае, у нас есть же ещё emacs lisp, который чуть поближе к cl и на котором хоть одну-десять строк, но напишешь, если попадёшь на емакс (а ты попадёшь, потому что редакторов для лиспов лучше нет). И в нём придётся разбираться в любом случае.
>> No.49627 Reply
>>49626
> emacs lisp
Это тоже что и elisp?
>> No.49628 Reply
>>49627
Да.
>> No.49629 Reply
>>49626
> Ну и define-macro всё-таки попривычнее syntax
Мне очень понравился ir-macro-transformer в чикене. Это обычный процедурный трансформер (как и define-macro, в отличие от всяких syntax), но с автоматической гигиенизацией всех символов.

А в схеме, вообще говоря, гигиена гораздо нужнее, чем в общелиспе, из-за общего пространства имён у функций и переменных.
>> No.49630 Reply
>>49629
Я видел ir и er, до sc не дошёл.
Там вроде бы не гигиенизация, а gensym'ы внизу. То есть, надстройка над обычными лиспомакросами.

> общего пространства

Ну назову я переменную list словом lst, не сломаюсь.
>> No.49631 Reply
>>49630
> Там вроде бы не гигиенизация, а gensym'ы внизу.
Ну да, а разве что-то ещё нужно для гигиены?

В википедии написано, что "Hygienic macros are macros whose expansion is guaranteed not to cause the accidental capture of identifiers." То есть, даже макрос с вручную расставленными gensym'ами (правильно расставленными) может считаться гигиеничным, насколько я понимаю. Ты не согласен?
>> No.49632 Reply
>>49625
> На что имеет смысл посмотреть из cl-ей?
А он один, выбирать не из чего. Ну, то есть, все его реализации прочно соответствуют одному, весьма обширному, стандарту.

Так что, бери любую популярную (или хотя бы живую) реализацию, которая есть для твоей платформы. Если тебе просто "посмотреть", то разницы ты не заметишь.
>> No.49633 Reply
>>49625
> Так что всё таки лучше, cl или схемка?
>>49626
> Как язык мне больше нравится схема, как платформа cl
Вот кстати да, у меня похожие чувства относительно cl и схемы.
>> No.49634 Reply
>>49630
> Ну назову я переменную list словом lst, не сломаюсь.
Что-то назовёшь, а что-то забудешь предусмотреть. А оно возьмёт и не сломается сразу, заработает без ошибок. А потом, через полгода, внезапно укусит тебя за жопу. Неспроста же эта штука называется "гигиеной", аналогия вполне уместна.
>> No.49635 Reply
>>49631
> Ну да, а разве что-то ещё нужно для гигиены?
Не обязательно, но вот на имена в syntax-макросах я смотрю как на символы с разными цветами, как это где-то объяснялось. Вообще, syntax-вещи не говорят про то, что там внутри обязаны быть те же gensym'ы.

Ну да, бред написал.
>>49634
Такого особо никогда и не было, но я не писал обширных макр. У тебя было?
Так-то да, можно сверху навернуть такого, чтобы всё поломало, но такого у меня не было, надо больше писать.
>> No.49636 Reply
File: wabbit.jpeg
Jpeg, 52.18 KB, 1280×720 - Click the image to expand
edit Find source with google Find source with iqdb
wabbit.jpeg
>>29402
> I once went through part of the MIT Scheme source code. In particular, wabbit.scm caught my eye. It appeared to be some obscure bit of the garbage collection system, and was full of names like WABBIT-SEASON-IS-OPEN, FUDD-THUNK, WABBIT-DESCWIPTOR, CALL-WITHIN-WABBIT-SEASON-WITH-DUCK-SEASON-RETURN-CONTINUATION, and KILL-DA-WITTLE-BUNNY-WABBITS.

https://github.com/tali713/mit-scheme/blob/master/src/wabbit/wabbit.scm
>> No.49637 Reply
>>49636
> DUCK-SEASON
Пёс-маньяк в деле?
>> No.49640 Reply
>>49618
> скакать с одной схемы на другую
А со схемы на cl и обратно тоже скачешь?
>> No.49642 Reply
>>49635
У меня не было. Да и не могло быть. Я control freak, и даже сама мысль о том, что у меня в коде может произойти незапланированный захват имени, вызывает у меня приступы паники и жгучее желание принять меры. Так что в схеме -- только гигиенические макры. Благо тот же ir-macro-transformer позволяет их использовать почти без какой-либо дополнительной когнитивной нагрузки.

А чтобы случилось плохое необязательно писать навороченные макросы. Например, ты написал для себя простенькую библиотечку, где, в числе прочего, определён некий символ f и (негигиеничный) макрос m, который разворачивается в код, использующий этот символ. А потом (через полгода, например), в коде использующем макрос m из этой библиотеки, определил новый символ с таким же именем f. Вот и приехали, felix sit anus novus.
>> No.49645 Reply
>>49640
Не, я не писал толком на cl, только читал про него и игрался.
>> No.49648 Reply
Тут говорят, в новой guile r7rs есть, они заявляли r5rs и куски r6rs.
Только полного r7rs нету.
>> No.49653 Reply
Анон, а расскажи- ка про Лисп. Я как- то его трогал, все эти скобки, довольно занятно, первый язык программирования, с которым познакомился, мне понравилось.

Где используется, какие фишки, зачем нужен, что за совместимость, насколько многофункционален.
Хочу продолжить обучение.
>> No.49654 Reply
>>49653
> Где используется,
В тех местах, где нужно программировать компьютеры.
> какие фишки,
Разнообразные.
> зачем нужен,
Чтобы программировать компьютеры на выполнение всевозможных задач.
> что за совместимость,
Нормально.
> насколько многофункционален.
Намного.

Ты, анон, задаёшь совешенно бессмысленные в своей неконкретности вопросы. Понравился язык? Хочешь научиться им пользоваться? Ну так вперёд!

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

А если ты вообще не в зуб ногой капча, кстати, "ногами веру", и даже не знаешь, какой вопрос задать, то иди читай SICP. Для начала вполне подойдёт, а там и вопросы появятся.
>> No.49655 Reply
>>49654
Я думал, мне опытные аноны в соответствующем треде дадут хотя бы краткую характеристику, а не станут троллить.
Как недобро.
>> No.49656 Reply
>>49655
А чего ты ждал? Что тебе https://ru.wikipedia.org/wiki/Лисп будут пересказывать в свободном изложении?

Хороший язык. Его основные концепции стоит изучить любому программисту или даже просто интересующемуся темой. Опытные аноны из соответствующего треда целиком поддерживают и одобряют твой интерес. Иди учи. Как появятся вопросы, приходи в соответствующий тред, опытные аноны с удовольствием ответят на них.
>> No.49657 Reply
>>49553
> Вообще изначально байтоёб, так что хочу байтоёбский императивный, но лисп. Есть идеи?
Тебе прямая дорога в CL. Там изкоробки даже есть функция disassemble, которая тебе натурально показывает ассемблерный дамп написанных тобой или не тобой функций. Ну и целое поле для низкоуровневых оптимизаций через декларации типов.
>> No.49658 Reply
>>49657
Да я уже более-менее определился. Вообще байтоёб не в этом смысле, а в том, чтобы разбирать двоичные файл на байтики, например. Основная масса реализаций с типами ниже строк тяжело работает, по ощущениям. Так что если кто знает как в вышеназванных реализациях работать с двоичными данными, или работал сам, можете подсказать вкратце если не лень. Ключевое слово в языке С - struct и сопутствующие функции, желательно без lisp-way и unix-way.
>> No.49660 Reply
>>49658
https://paste.debian.net/1121242/

> Ключевое слово в языке С - struct и сопутствующие функции
На тебе три часа на несвежую голову утром, мысли вслух под guile scheme. Это можно сделать короче, красивее и так, как надо, но мне лень и чёткого понимания нет.
Сперва взгляни на let в строке 36, всё писалось с него. По крайней мере, всё без переменной c.

По поводу твоих ощущений: ну да, мне как бы тоже не очень хочется вызывать все эти bytevector-u8-ref, но один раз пришлось, если мало, то можно жить. Вообще, всё, что есть - это несколько SRFI, прямо смотришь в оглавление мануала на твою схему или на srfi.schemers.org, не забыв про (rnrs bytevectors), но ощущения, как понимаешь, не очень. Надо сокращать и устраиваться поудобней.

> lisp-way и unix-way
А это что за звери и чем они тебе не угодили? Что понимаешь под?

Что-то здешняя вакаба не понимает файлы. Говорит, exception - неизвестная кодировка. Хотя сверху она стоит.
>> No.49661 Reply
>>49655
>>49653
Давай начнём с того, что я не могу себе представить человека, у которого лисп был первым. Кроме пользователя какой-нибудь CAD, но я с такими не общаюсь за их отсутствием.
Так что толстишь тут скорее всего ты, особенно, учитывая то, что краткая характеристика уже в треде есть и не одна.
>> No.49667 Reply
>>49660
> unix-way lisp-way чем не угодили
Да, нужно бы расшифровать. В данном случае имел ввиду следующие проблемы:
для unix-way - сведение всего к текстовому конвееру, тоесть практически антиподход для случая обработки двоичных данных;
для lisp-way - когда вместо 1МиБ двоичных данных придётся работать с 1 миллионом точечных пар (или как они там в любой книжке по лиспу позиционируются как самый базовый тип данных).

За пример благодарю.
>> No.49668 Reply
>>49667
> для unix-way - сведение всего к текстовому конвееру, тоесть практически антиподход для случая обработки двоичных данных;
Можно же делать текстовые конвееры с именами отдельных файлов. Это удобней для пакетной обработки, например. Нет, конечно, есть примеры, когда в пайпы долны полезть бинарные данные.

В r5rs векторы есть например. В книжках по лиспу мне не приходилось сталкиваться с совсем уж "двоичными" запакованными данными.
А ещё ко всему есть вариация этих самых списков, где снизу массивы вместо cons-ячеек. Но за это ты платишь неизменяемостью списка.
https://www.gnu.org/software/guile/docs/master/guile.html/VLists.html

Ты не доводи до абсурда же, изо всякого правила есть исключения. Просто текстовые данные проще дёргать из того же шелла, например. Работать с ними проще. И чем больше излишней бинарщины, тем труднее с ней жить. Со списками теми же работать проще, чем неоправданным образом делать ADT или векторы на каждый чих. Как-то так. Но это не значит, что всякая программа обязана быть текстовым фильтром или использовать только списки.
>> No.49669 Reply
>>49668
Где ты увидел доведение до абсурда? Мне кажется ты проецируешь какие то свои взгляды, например если тебе проще работать с текстом, это не значит что и другим также.

А почему проще? Потому что если попытаться вчитаться в вышеприведённый пример >>49660 окажется что работать с данными таким образом - это боль. Получается что лисп в данном примере показывает себя как язык, не приспособленный для таких задач. Конечно тогда проще не натягивать сову на глобус.

> платишь неизменяемостью списка
Очередное необоснованное ограничение.
>> No.49670 Reply
>>49669
> Где ты увидел доведение до абсурда?

>>49658
> желательно без lisp-way и unix-way
>>49667
> для unix-way - сведение всего к текстовому конвееру
> для lisp-way - когда вместо 1МиБ двоичных данных придётся работать с 1 миллионом точечных пар (или как они там в любой книжке по лиспу позиционируются как самый базовый тип данных).

Вот доведение до абсурда. У тебя в руках UNIX-подобная система есть? Ты в курсе, что у неё есть библиотеки и остальные программы, которые обрабатывают бинарные данные целиком и полностью и даже пишут в пайпы/стандартные потоки бинарщину? Даже sysvinit слушает пайп /run/initctl, забирая оттуда структуру. Если надо — давай, бери, пользуйся, никто тебе не запрещает, юниксвей — про то, что структуры и байты не надо бездумно совать везде, где придётся. Где можно обойтись текстом, вот там и обходись текстом. У меня же сложилось ощущение, что ты же думаешь, что текст надо пихать везде. Точно то же самое ты говоришь про cons-списки, считая, что тебя насильно заставляют пользоваться ими вместо векторов, особенно для целей, для которых они мало предназначены.

Я уже не говорю, что lisp-way — это оксюморон. У языка с подстраиваемыми языковыми формами никакого way практически нет. Хоть awk с шеллом впиливай прямо внутрь.

> Мне кажется ты проецируешь какие то свои взгляды, например если тебе проще работать с текстом
А это не мои взгляды. Это вгляды любого человека, державшего в руках шелл. *nix — это кучка мелких максимально реюзабельных утилит, склеиваемых вместе шеллом. Я этот подход считаю удобным, как и кто-то другой, вот и всё. Не хочешь скреплять шеллом — не скрепляй, никто тебе не запрещает.

> А почему проще? Потому что если попытаться вчитаться в вышеприведённый пример >>49660 окажется что работать с данными таким образом - это боль. Получается что лисп в данном примере показывает себя как язык, не приспособленный для таких задач. Конечно тогда проще не натягивать сову на глобус.

Во-первых, не лисп, а scheme. Scheme вообще не обязан тебе быть приспособлен для всего, особенно со стандартом в 50 страниц. Лисп в целом жил на лисп-машинах как единственный язык и вполне себе обрабатывал всё, что нужно, про common lisp говорить не буду. Но scheme приспособлен приспосабливаться. Я приспособил.

Ящитаю, оформить вот эти мысли из файла как модуль (или просто подключать через include/load) и использовать формы
(bstruct mystruct
(a 1)
(b 2)
(c 8 ->u64 u64->))

(with-mystruct bv
(bv.c newvalue)
(format #t ".a ~a\n.b ~a\n.c ~x\n"
(bv.a)
(bv.b)
(bv.c)))
особого труда не составит. В случае чего можно вполне себе нарисовать врапперы вокруг bytevector-<тип>-native-{ref,set}, особо много это не займёт.

> Очередное необоснованное ограничение.
Честно говоря, мне лень читать исходник и смотреть, почему там неизменяемость, хочешь обоснований — смотри сам. Векторы и так есть, а в основной массе списки обрабатываются без изменения хвоста.
>> No.49726 Reply
File: 15304474106560.png
Png, 14056.52 KB, 3041×4096 - Click the image to expand
edit Find source with google Find source with iqdb
15304474106560.png
Позвольте сХОРОнить.
>> No.49870 Reply
Здравствуйте. Вы живы или умерли? Хочу срач CL vs Scheme в контекте описаний мест работы, где редко, тайком, но используют. Такие, вроде, есть.
>> No.49872 Reply
>>49726
ЗаХОРОнить.

>>49870
> CL vs Scheme
Что то х~~ня, что это х~~ня.
Как работодателю мозги промоешь, на том и будешь писать.
>> No.49921 Reply
>> No.49922 Reply
>>49921
Ты автор этого кода? Используешь этот код?
Почему бы не перенести его прямо сюда, или даже заархивировать тот тред целиком, мало ли пропадёт. Если конечно считаешь, что он может быть полезен. Без метаинформации куски write-only лисп кода не имеют никакого смысла.
>> No.49940 Reply
File: [AniFilm]-Subete-...
Jpg, 151.21 KB, 1280×720
edit Find source with google Find source with iqdb
[AniFilm]-Subete-ga-F-ni-Naru-04-[TV]-[WEBRip-720p.jpg
File: [AniFilm]-Subete-...
Jpg, 143.64 KB, 1280×720
edit Find source with google Find source with iqdb
[AniFilm]-Subete-ga-F-ni-Naru-04-[TV]-[WEBRip-720p.jpg
File: [AniFilm]-Subete-...
Jpg, 119.99 KB, 1280×720
edit Find source with google Find source with iqdb
[AniFilm]-Subete-ga-F-ni-Naru-04-[TV]-[WEBRip-720p.jpg

>>29402
Японцы жгут.
>> No.49942 Reply
>> No.49944 Reply
>>49942
В эндинге красуются файлы на лисп (1), интерпретатор GNU CLISP (2), фрагмент исходника (3) и пример реализации игры "Жизнь" Конвея на этом языке. Вдобавок -- ещё и с осью emacs от Грызущего Мозоли. Что мне показалось занятным.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]