LINUX.ORG.RU

DrRacket and elisp окончательно запутался

 ,


0

3

Не могу понять уже, что я тут писал, всего-то нужна функция которая режет лист на две части и возвращает левую часть то, что я написал на ракете, не работает и не пойму почему

#lang racket
(define *distance-lst* (list 1 2 3 4 5 6))

(define *A-distance* 3)
(define *left-A-lst* '())

(define d-lst (length *distance-lst*))
(define *output-lst* '())
(define (slice input-lst a output-lst)
  (if (< (first input-lst) a)
      (slice (cons (first input-lst) output-lst)
             a
             (set! input-lst (rest input-lst)))
      output-lst))
     
;;(define (split-lst lst-input a lst-output)
;  (if (< (first lst-input) a)
 ;     (split-lst (set! lst-input (rest lst-input))
  ;                     a
   ;                    (set! lst-output
    ;                         (cons
     ;                         (first lst-input) lst-output)))
 ; lst-output))

(slice *distance-lst* *A-distance* *left-A-lst*)

и вот на elisp и работает как надо, задолбало, что не так не могу понять эту ракету

(defun slice (input-lst a output-lst)
(if (< (car input-lst) a)
(slice (cdr input-lst) a (push (car input-lst) output-lst))
output-lst))

(nreverse (slice '(1 2 3 4 5 6) 5 '()))
Ответ на: комментарий от monk

Только если писать в стиле Си: не использовать списки (только simple-array), типизировать все переменные, defstruct вместо классов.

Можно нормально писать, только слегка аннотируя сигнатуры функций, и всё равно, код будет заметно быстрей шевелиться, если компилятор вменяемый.

Типичный жирный плюсатый проект, вон, тоже не шибко быстрый, потому что с чрезмерными уровнями абстракций, откровенно плохо написанного кода и перегрузка внутренних ресурсов процессора (кэш, TLB) уже неважно, что там компилятор нагородил.

mv ★★★★★
()
Ответ на: комментарий от Virtuos86

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

Коммерческие тоже, ибо клиентов и так мало, и они платят лицензии не за скорость, а за стабильность.

LispWorks 10 лет назад был медленнее SBCL, но на порядок стабильней.

mv ★★★★★
()
Ответ на: комментарий от mv

Можно нормально писать, только слегка аннотируя сигнатуры функций, и всё равно, код будет заметно быстрей шевелиться, если компилятор вменяемый.

Это понятно. Но всё равно один и тот же алгоритм на списках всегда будет медленнее, чем на массивах/указателях.

Типичный жирный плюсатый проект, вон, тоже не шибко быстрый, потому что с чрезмерными уровнями абстракций

Вот никогда не понимал, как у них это получается. При переписывании в лоб с Си на Си++ работать начинает быстрее (часть вычисления адресов функций при ООП уходит на этап компиляции, форматированные строки тоже на этапе компиляции порядок вызовов определяют и т.д.).

monk ★★★★★
()
Ответ на: комментарий от monk

Это понятно. Но всё равно один и тот же алгоритм на списках всегда будет медленнее, чем на массивах/указателях.

Нет, это не так. Если массив большой и разреженный, то доступ к нему будет медленней, чем через список, особенно, с fast-forward. Или через дерево.

С точки зрения процессора, лучше помолотить побольше команд, но над более локальными/компактно расположенными данными.

Вот никогда не понимал, как у них это получается. При переписывании в лоб с Си на Си++ работать начинает быстрее (часть вычисления адресов функций при ООП уходит на этап компиляции, форматированные строки тоже на этапе компиляции порядок вызовов определяют и т.д.).

Я когда работал в EMC, у нас в середине 10-х годов присутствовал код, написанный в 84-м. Когда падал процесс с RSS 700 Гб, 120 мб страниц исполняемого кода и 15000 тредов, то стек-фреймы были глубиной больше 90.

В основном, код был на C++, но его было 15 млн. строк и 30 лет истории. Полностью с нуля сборка делалась за три, что ли, дня. Даже запускался на системе до полностью готового вида где-то 10-15 минут.

Переписать нереально: слишком много ресурсов уйдёт, плюс клиенты покупали не за скорость, а за стабильность.

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

mv ★★★★★
()
Последнее исправление: mv (всего исправлений: 2)
Ответ на: комментарий от mv

Если массив большой и разреженный,

Большой список хуже большого массива. А в случае лиспа он ещё и сборщик мусора раком ставит.

чем через список, особенно, с fast-forward. Или через дерево.

Это ты о чем? О произвольном доступе вместо линейного? Даже через дерево/fast-forward будет log N чтений на доступ к элементу. А у массива одно чтение.

И даже при последовательном чтении массив короче на N * размер указателя и гарантированно лежит в последовательном куске памяти.

код, написанный в 84-м. Когда падал процесс с RSS 700 Гб

Как же он в 84 работал? Тогда даже на жёстких дисках столько памяти было не собрать.

monk ★★★★★
()
Ответ на: комментарий от monk

Большой список хуже большого массива.

Не всегда.

А в случае лиспа он ещё и сборщик мусора раком ставит.

Пусть траверсит в соседнем треде, лишь бы не блокировал.

Это ты о чем? О произвольном доступе вместо линейного? Даже через дерево/fast-forward будет log N чтений на доступ к элементу. А у массива одно чтение.

Ну, друг, надо читать про архитектуру CPU и операционной системы, чтобы такое в разрезе производительности не утверждать. Смотреть особо внимательно на устройство виртуальной памяти и реализацию её поддержки в операционке. Это для тебя «одно чтение», а для процессора - куча хэшей и многоуровненых структур, а также пучок чтений и записи.

Отчасти, по этой причине маленький кусочек на плюсах работает быстро, а когда его разместили в большом софте, то начинает тормозить и светиться красным в профайлере. А потом многометровый массив с «одним чтением» заменили на сложную структуру, и код этот с горизонта профайлера вообще исчез.

И даже при последовательном чтении массив короче на N * размер указателя и гарантированно лежит в последовательном куске памяти.

Это тоже не факт. HW prefetcher, конечно, дела сгладит, но линейный массив в памяти далеко не факт, что линейно расположен.

Как же он в 84 работал? Тогда даже на жёстких дисках столько памяти было не собрать.

Очевидно, что в 84 этот код работал в другом продукте.

mv ★★★★★
()
Ответ на: комментарий от monk

До перехода было ещё медленнее. Я дал замер по компоненту, который уже полностью переписали (quantum css).

Неоднократно наблюдавшееся в реальной жизни:

  1. Написали прототип на питоне, заказчик торопит сунули в продакшн.

  2. С ростом популярности, а следовательно нагрузки, все начинает тормозить. Переписали на крестах - «зашевелилось».

  3. По мере дальнейшего повышения нагрузки снова начинаются «тормоза». Переписали обратно на питон - все «летает».

Вопрос: можно ли сделать вывод, что программы на питоне работают быстрее программ на С++?

anonymous
()
Ответ на: комментарий от Virtuos86

Вот у monk пример на лиспе

Пример монка написан не на лиспе, а на ДСЛе от hu.dwim. А hu.dwim, ваще, норкоманы.

anonymous
()
Ответ на: комментарий от Virtuos86

И что? До сих пор настукивают? А типичные борщелисповские километровые идентификаторы with-making-persistent-instances не устают набирать?

В емаксе максимум: w-m-p-i + Enter.

anonymous
()
Ответ на: комментарий от Virtuos86

а ты, анонимус, кто?

Пук? Кек.

Что за агрессия?

За другого анонимуса я не отвечаю.

Ну, ты сказанул))) Ты бы еше Дена73 лиспером назвал. ЛОЛ

Лавсан - крестовик. Или шарпер. Но никак не лиспер - он не чувствует язык, не умеет писать идиоматический код. Хотя, знает гиперспеку и внутренности СБЦЛ.

Дык, чтобы про кого-то писать, что он не лиспер, надо самому быть лиспером, и лиспером хорошим, либо пустобрехом. Я и хочу узнать, кто ты? Если просто пердишь в лужу, это твое дело, на то ты и анонимус. Если ты лиспер, давай свое авторитетное мнение.

Судя по постоянному употреблению «борщелисп» - ты, точно, пустобрех.

Чтобы понять, что повар не умеет готовить омлет, не обязательно быть поваром. Достаточно раньше пробовать нормальный омлет. А про лавсана следующий пост.

anonymous
()
Ответ на: комментарий от Virtuos86

Я извиняюсь, а ты, анонимус, кто? Интересно. Мне известно, что лавсан: а.) долго знаком с лиспом; б.) хоть что-то на нем писал; в.) имеет какой-никакой кругозор относительно других ЯП, а значит, может сравнивать.

Программист на фортране может писать фортрановские программы на любом языке.

Лавсан - хороший программист, но лиспа не понимает. Несколько лет назад, здесь на ЛОРе кто-то предложил сравнить разные ЯП на одной тестовой задаче. Что-то вроде самодельного файрвола: идет поток ИПшников, надо фильтровать их согласно заданному списку. Решение Лавсана было корректным, и очень быстрым, с единственным недостатком - так на лиспе не пишут. Чему и были посвящены несколько статей в ЖЖ, с разъяснением как надо писать на лиспе. Если тебя интересует, нагуглить не сложно. Если нет - с какой стати я должен тебе чего-то доказывать?

anonymous
()
Ответ на: комментарий от anonymous

Но квазиквотация и разкавычивание там ведь лисповые?

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Надо же, как удобно. Наверное, и quasiquote и unquote-splicing можно было бы так же удобно набирать, и код выглядел бы тогда читаемее?

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Судя по постоянному употреблению «борщелисп» - ты, точно, пустобрех.

Дедукция, достойная Шерлока Холмса. Уложил на лопатки, нечего сказать.

Чтобы понять, что повар не умеет готовить омлет, не обязательно быть поваром. Достаточно раньше пробовать нормальный омлет.

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

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Я может и погуглю. Но мне больше интересно, раз в тред заходят лисперы, почему никто из них не желает отвечать на предмет киллер-фич лишпа и других вопросов, но упорно цепляется за обсуждение лавсана? Он что, медом намазан? )
Еще и обзываются. )

Virtuos86 ★★★★★
()
Ответ на: комментарий от mv

Не всегда.

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

Пусть траверсит в соседнем треде, лишь бы не блокировал.

Во-первых, он сбрасывает кэш. Во-вторых, он в процессе аллоцирует память. В-третьих, возможна ситуация, что всё работает пока не включится gc. Типа такого:

* (defvar *a* (loop for i from 0 to 50000000 collect i))
*A*
* (car *a*)
0
* (cadr *a*)
1
* (gc)
Heap exhausted during garbage collection: 0 bytes available, 16 requested.
Gen  Boxed Unboxed   LgBox LgUnbox  Pin       Alloc     Waste        Trig      WP GCs Mem-age
 0       0       0       0       0    0           0         0    10737418       0   0  0,0000
 1    9672       0       0       0    2   316848784     83312    10737418    9672   0  1,0183
 2   14765       1       0       0    9   483743808    108480     2000000   14766   0  0,0000
 3       0       0       0       0    0           0         0     2000000       0   0  0,0000
 4       0       0       0       0    0           0         0     2000000       0   0  0,0000
 5       0       0       0       0    0           0         0     2000000       0   0  0,0000
 6     501     258      64      47    0    27637664    870496     2000000     870   0  0,0000
 7    7460       0       0       0    0   244449280         0     2000000    7460   0  0,0000
           Total bytes allocated    =    1072679536
           Dynamic-space-size bytes =    1073741824
GC control variables:
   *GC-INHIBIT* = true
   *GC-PENDING* = false
   *STOP-FOR-GC-PENDING* = false
fatal error encountered in SBCL pid 32535(tid 0x7f30aefa5280):
Heap exhausted, game over.

Welcome to LDB, a low-level debugger for the Lisp runtime environment.
ldb>

но линейный массив в памяти далеко не факт, что линейно расположен

В смысле? Адреса у него гарантированно подряд идут. По определению массива. Физически может, конечно, фрагментироваться на современных ОС со страничной памятью. Но всё равно фрагментация меньше, чем у списка.

monk ★★★★★
()
Ответ на: комментарий от Virtuos86

почему никто из них не желает отвечать на предмет киллер-фич лишпа и других вопросов, но упорно цепляется за обсуждение лавсана?

А в этом причина малой кодовой базы. Чуть ли не каждый лиспер считает себя носителем идей правильного (идеоматичного) лиспа, а всех, кто пишет не так, считает еретиками.

«А hu.dwim, ваще, норкоманы» (c)

А лисп, по своей структуре, позволяет писать очень по-разному, так как ограничения языка минимальны.

В результате, даже та тысяча программистов, которая есть, не составляет одно сообщество, а разбита на группки по 10-20 человек, каждая из которых пилит инфраструктуру для своего «правильного лиспа» и принципиально не заимствует у остальных.

В чём-то ситуация напоминает ситуацию с GUI в Linux’е. Если на Apple есть один стандарт и все под него подстраиваются, то написать программу, которая была бы переносима между разными WM линукса (и выглядела бы в них органично) сложнее, чем написать программу переносимую между Win/Mac/GTK.

monk ★★★★★
()
Ответ на: комментарий от anonymous

По мере дальнейшего повышения нагрузки снова начинаются «тормоза». Переписали обратно на питон - все «летает».

А можно пример из жизни? Потому что описание выглядит как больная фантазия.

monk ★★★★★
()
Ответ на: комментарий от anonymous

А hu.dwim, ваще, норкоманы.

— Одно слово — румын!
— Так он же болгарин
— Да?! А какая разница?

(c)

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

с единственным недостатком - так на лиспе не пишут

А кто решает, как «пишут» на конкретном языке программирования, а как не пишут?

Чушь какая-то! Считаю за одно из проявлений эффекта толпы.

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

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Потенциал для создания проблем конечно есть, но проблемы пока нет.

Ну вот и тут аналогично. Да, в плюсах можно в операторе сложения форматировать диск, но так почему-то никто не делает.

Кресты же засрали, даже не имея формальной возможности, когда оказалось что новый весёлый стандарт можно принимать по желанию левой пятки

Это о чём? Или тебе просто не нравится, что язык развивается и в него добавляют новые возможности? Скажи ещё, что они никому не нужны были.

Эту неуспешность я вижу в том, что сложность их абстракций не востребована.

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

Опять же, можно зайти с другой стороны: лисп сейчас, пожалуй, менее популярен хаскеля или скалы. Значит ли это, что идеи лиспа плохи? Я думаю, что на популярность влияет множество факторов и техническая (не)совершенность играет (к сожалению) далеко не первую роль.

т.е. необходим ли раст в программировании, как необходим матан в физике

Это слишком сильный уход в философию. С более практической точки зрения могу сказать, что я уже третью работу на расте нашёл (и нет, с предыдущих ушёл не потому, что всё плохо было). Большие компании (например, эпл и майкрософт) тоже интересуются растом, даже вакансии есть. Хотя у них и свои языки есть и создание нового вполне посильная задача.

Недавно собеседовался в одну контору - им как раз надо писать низкоуровневый код, но достаточного количества крутых сишников/плюсовиков нет. Именно поэтому взяли раст и довольны. Ну и в целом подход «хороший программист не совершает ошибки» кажется мне не продуктивныm - предпочту получать максимум помощи от компилятора. Даже если это несёт с собой определённые ограничения. Ну а раст предлагает не только ограничения, а и возможности, особенно, если мы сравниваем его с С.

а есть ли такие задачи в принципе, пусть не массово, а вообще

Лично я предпочту раст сишке или плюсам в любом случае, если нет каких-либо сильных факторов вроде наличия готовых библиотек/инфраструктуры. Переписывать существующие продукты, опять же, непродуктивно. Ниша может и небольшая, но есть.

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от DarkEld3r

Это слишком сильный уход в философию

Это ты просто понимаешь, что ответ «скорее нет, чем да» и хочешь перевести стрелки. Вопрос вполне конкретный.

достаточного количества крутых сишников/плюсовиков нет

А может кто-то просто очень жадный? Как ни посмотришь на вакансии по Си, так з.п. 30т.р. Я тебе открою секрет, если бы был реальный спрос на сишников и крестовиков, то очень быстро они бы появились. А если за работу платят ниже чем смузихлёбам (или даже столько же, или даже на 3 копейки больше), то о каких таких сложных задачах вообще речь, каких таких «крутых» программистов для решения этих сложных задач ищут все эти люди? Не надо думать, что люди такие тупые и не осиливают Си/кресты, просто это осиливание должно оплачиваться соответствующе сложности.

взяли раст и довольны

Естественно, дурачков-фанбоев проще найти, и платить не нужно, наверное.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

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

Это не совсем (или не всегда) так работает. Участвовал в проекте, где большая часть команды писала аналогичный продукт. В итоге знакомые грабли обошли, но нашлись новые. И это переписывали с С++ на С++. Правда код переиспользовать нельзя было.

DarkEld3r ★★★★★
()
Ответ на: комментарий от no-such-file

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

Больше похоже на здравый смысл, а не на «костыль».

DarkEld3r ★★★★★
()
Ответ на: комментарий от no-such-file

Это ты просто понимаешь, что ответ «скорее нет, чем да» и хочешь перевести стрелки. Вопрос вполне конкретный.

«Конкретный вопрос» на который ты отвечаешь «ну мне так кажется». Если говорить о фактах, которые можно проверить, то повторюсь: вакансии есть, сообщество растёт, библиотеки пишутся.

Естественно, дурачков-фанбоев проще найти, и платить не нужно, наверное.

Ты сам-то в это веришь? От дурачков и толку не будет.

Из того, что я знаю, раст разработчикам платят сопоставимо с плюсовиками. И на мой первый раст-проект нанимали, в том числе, как раз С++ разработчиков, чтобы переучивать.

DarkEld3r ★★★★★
()
Ответ на: комментарий от monk

В смысле? Адреса у него гарантированно подряд идут. По определению массива. Физически может, конечно, фрагментироваться на современных ОС со страничной памятью. Но всё равно фрагментация меньше, чем у списка.

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

mv ★★★★★
()
Ответ на: комментарий от mv

Скажите пожалуйста, Таненбаум – хорошее или уже не очень актуальное чтиво для освоения внутренностей ОС, тонкостей и особенностей работы памяти и процессора?

Hertz ★★★★★
()
Ответ на: комментарий от monk

Основная киллерфича — это замыкания.

(мимокрокодил) по сравнению с чем, с C что ли? где их нет, этих замыканий?

t184256 ★★★★★
()
Ответ на: комментарий от t184256

В 80-х? Да нигде нормальных лексических замыканий еще не было. В смолтоке было нечто похожее (блоки), но не совсем то. Да и позже в 90-х это было экзотикой. Популяризация началась только когда динамическая скриптота зашла в мейнстрим. К тому времени общелиспу уже было 20 лет, а схемке все 30. Крестострадальцы узнали про замыкания всего лет 10 назад, и долго еще кривлялись «блямбдами» пока комитет не заставил их полюбить.

anonymous
()
Ответ на: комментарий от Virtuos86

,Надо же, как удобно. Наверное, и quasiquote и unquote-splicing можно было бы так же удобно набирать, и код выглядел бы тогда читаемее?

По твоему выходит, что begin и end выглядят гораздо читаемее, чем { и }.

anonymous
()
Ответ на: комментарий от Virtuos86

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

А регистрантам ты сразу веришь на слово???

Я может и погуглю. Но мне больше интересно, раз в тред заходят лисперы, почему никто из них не желает отвечать на предмет киллер-фич лишпа и других вопросов, но упорно цепляется за обсуждение лавсана? Он что, медом намазан? )

Лавсан не девочка, чтобы его любить. И сильно испортил о себе впечатление, когда пытался подражать Луговскому, про которого отдельный разговор. Лавсану тогда было около 20, но впечатление о человеке остается надолго. А как программист он очень хорош. Гораздо лучше большинства присутствующих. А лисп… На лиспе можно писать в (почти) любом стиле - спроси мв. Возможно лавсан со временем проникнется стилем лиспа, но даже если и не проникнется, то пользу сообществу своими программами он приносит.

Вот ден73 - этот раздражает. Его в большинстве сообществ просто игнорят.

А киллер-фича… Ты уже столько лет кричишь «боршелишп», что если бы захотел узнать, давно бы узнал - все достоинства и недостатки. Лисп многократно обсуждались именно лисперами. Поищи пост мв, что ему не нравится в лиспе. Какой смысл перед тобой еще раз распинаться?

Еще и обзываются. )

Ты первый начал. (смайлик, показывающий язык)

anonymous
()
Ответ на: комментарий от monk

Зачем дурака включаешь?

Первоначально на питоне для скорости разработки. По том на Си «один в один». А затем еще раз на питон, но уже с учетом полученного опыта. Где алгоритм сменили и время работы с квадратичного стало логарифмическим, а то и линейным. Где-то заранее проиндексировали… И чудо! Программа на питоне работает быстрее сишной.

Видел такое и в интернет магазинах, и с скоринговой системе, и в биллинге. Думаю и во многих других областях, если сэкономить на проектировании, подобное скорее правило, чем исключение. А ты говоришь «фантазия».)))

anonymous
()
Ответ на: комментарий от no-such-file

А может кто-то просто очень жадный? Как ни посмотришь на вакансии по Си, так з.п. 30т.р. Я тебе открою секрет, если бы был реальный спрос на сишников и крестовиков, то очень быстро они бы появились…

Тут вопрос скорее не в жадности (не столько в жадности), а в том что ХРюши не отличают даннинг-крюгеровских «всезнаек» от нормальных специалистов и отдают предпочтение первым за их напор.

anonymous
()
Ответ на: комментарий от dave

Автору должно надо быть глубоко по барабану…

Вот честно, не распарсил.

А кто решает, как «пишут» на конкретном языке программирования, а как не пишут?

Чушь какая-то! Считаю за одно из проявлений эффекта толпы.

Автору должно надо быть глубоко по барабану на так называемый «идиоматический» стиль, если его авторский стиль помогает с блеском решить поставленную задачу.

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

(defun geo-add-text (TextString InsertionPoint Height Alignment Rotation / obj)
(if (null Alignment) (setq Alignment acAlignmentLeft))
(setq obj (vla-addtext
(vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object))) TextString
(if (or (= Alignment acAlignmentAligned)
(= Alignment acAlignmentFit))
(vlax-3d-point (car InsertionPoint))
(vlax-3d-point InsertionPoint)
) Height))
(cond
((= Alignment acAlignmentLeft) (vla-put-rotation obj Rotation))
((or (= Alignment acAlignmentAligned)
(= Alignment acAlignmentFit))
(vla-put-alignment obj Alignment)
(vla-put-textalignmentpoint obj (vlax-3d-point (cadr InsertionPoint)))
)
(T
(vla-put-alignment obj Alignment)
(vla-put-textalignmentpoint obj (vlax-3d-point InsertionPoint))
(vla-put-rotation obj Rotation)
)
(vla-update obj)
);_end cond

);_end defun

Первых в разы меньше, но обычно именно они создают новое и прорывное (пруфов не будет - за этим в яндекс).

Чтобы создать что-то новое, надо хотя бы ознакомиться со старым. Иначе вероятность создания чего-то нового, как у мартышек печатающих «Войну и мир». Ну, или все новое окажется старыми велосипедами с треугольными колесами.

anonymous
()
Ответ на: комментарий от DarkEld3r

Опять же, можно зайти с другой стороны: лисп сейчас, пожалуй, менее популярен хаскеля или скалы. Значит ли это, что идеи лиспа плохи? Я думаю, что на популярность влияет множество факторов и техническая (не)совершенность играет (к сожалению) далеко не первую роль.

Ниша для лиспа на рынке, именно рынке, крайне мала. А дальше по кругу: нет спроса - нет программистов, нет программистов - кто будет поддерживать…

А там, где лисп силен (исследование, прототипирование и т.п.), конкурентов не видать, но… Нет программистов - нет и спроса…

anonymous
()
Ответ на: комментарий от anonymous

По твоему выходит, что begin и end выглядят гораздо читаемее, чем { и }.

рубисты как-то живут с end вместе с фигурными скобками, и задница у них что-то не подгорает от лестницы «эндов».

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

А регистрантам ты сразу веришь на слово???

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

Лавсана я предлагаю уже оставить за скобками (лол).

В целом спасибо за фидбек.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

рубисты как-то живут с end вместе с фигурными скобками, и задница у них что-то не подгорает от лестницы «эндов».

Внимательно прочти пост, на который я отвечал.


Квазицитирование и «оператор вклеивания» (это не оператор, но так проще объяснить) являются базовыми и изучаются на первом занятии написания макросов,

Вот два абсолютно идентичных макроса.

(defmacro my-when (condition &rest body)
  `(if ,condition (progn ,@body)))

(defmacro my-when (condition &rest body)
  (quasiquote (if (unquote condition)
                  (progn (unquote-splicing body)))))

Первый работает «из коробки», для второго надо (в СБЦЛ) сделать видимыми (чтобы не писать префикс пакета) символы sb-int:quasiquote, sb-impl::unquote и sb-impl::unquote-splicing

Человеку, первый раз увидевшему лисп, второй макрос покажется понятнее, НО! Такой человек не поймет семантику выражения. А знакомому с основами лиспа, проще читать (и уж, тем более писать) певый макрос.

anonymous
()
Ответ на: комментарий от Virtuos86

>

Регистрант он всегда один под конкретным юзернеймом, его можно отслеживать и иметь представление о нем, …

То есть не вникать в то, что он пишет, а апеллировать к авторитету. Ну, иногда… )

anonymous
()
Ответ на: комментарий от anonymous

Сорян!

Решил проверить макрос - во втором косяк. Ошибка с sb-impl::unquote и sb-impl::unquote-splicing

Надо залезть в пакет sb-impl и посмотреть как правильно реализовать, но сейчас лень и очень хочется спать. Извиняй!

anonymous
()
Ответ на: комментарий от anonymous

Ошибка в том смысле, что для правильной работы второго макроса недостаточно сделать видимыми символы sb-impl::unquote и sb-impl::unquote-splicing

А сам макрос правильный.

anonymous
()
Ответ на: > от anonymous

Регистрант он всегда один под конкретным юзернеймом, его можно отслеживать и иметь представление о нем, …

То есть не вникать в то, что он пишет, а апеллировать к авторитету. Ну, иногда… )

Пустой разговор. Я даже не знаю, со сколькими анонимусами говорил в этом треде. Камон, ребята, как можно принимать всерьез такое общение, лол? Для сопливой молодежи пойдет, а мне неинтересно уже.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Внимательно прочти пост, на который я отвечал.

Кто «я»?) Ты никто, ты анонимус, имя вам легион. Меня больше в этот треде нет.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

По твоему выходит, что begin и end выглядят гораздо читаемее, чем { и }.

Это разные вещи. { и } определяют структуру кода, т.е. выполняют роль знаков препинания из естественных языков. В Лиспе таковыми являются обычные скобки. А вот значки для quote и т.д. это всего-лишь «удобные» сокращения, вроде использования кванторов в математике. И тут уже не так очевидно, что будет читаемее.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

По твоему выходит, что begin и end выглядят гораздо читаемее, чем { и }.

Это разные вещи. { и } определяют структуру кода, т.е. выполняют роль знаков препинания из естественных языков

Нет. { и } также как begin и end выполняют одинаковую функцию - выделяют блок кода. В паскале и крестах у программера нет выбора, как зашито в компилятор, так и пиши. А в лиспе хошь ', хошь quote. Хотя по мне, читаемость - дело исключительно привычки.

anonymous
()
Ответ на: комментарий от Virtuos86

Внимательно прочти пост, на который я отвечал.

Кто «я»?) Ты никто, ты анонимус, имя вам легион.

Какая разница «Кто «я»»? Ответ был не твой пост.

Меня больше в этот треде нет.

Если бы ты, вообще, в лиспотреды не лез… Но. Нет, сынок, это фантастика (с)

anonymous
()
Ответ на: комментарий от anonymous

выделяют блок кода

Во-первых не блок кода, а составной оператор. А во-вторых это что, не единица структуры кода? Основная проблема begin/end не в том, что больше печатать, а в том, что это визуально неотличимо от «слов» языка и замусоривает собственно текст. Всё равно что по-русски писать в телеграфном стиле тире квчк привет зпт буфет квчк тчк

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Основная проблема begin/end не в том, что больше печатать, а в том, что это визуально неотличимо от «слов» языка и замусоривает собственно текст. Всё равно что по-русски писать в телеграфном стиле тире квчк привет зпт буфет квчк тчк

Ты другими словами повторил мой пост, а в чем спор-то?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.