LINUX.ORG.RU

Нужны идеи по итерации

 , ,


2

2

Существует 3 листа

A (1 2 3 4 5)
B (6 7 8 9 10)
C (11 -12 13 -14 -15)
нужно получить
D (1 7 3 9 10)
по листу C смотрим если елемент положительный берём елемент из листа A, если елемент в листе С отрицательный берём елемент из листа B.

перекрутил в голове nth, elt, do. Подкиньте идею с кодом.

Ответ на: комментарий от troy-harder

про какого конечного потребителя речь

Про того, который будет пользоваться ЛИСП-системой.

там и там пишет код программист

Ой, так ты вообще не в теме. Пользователи условного emacs или autocad это программисты? Это я тебе популярно объясняю, как идиоту сейчас. Ты удивишься, но ЛИСП возник во времена, когда пользоваться компом означало пользоваться Бейсиком ЛИСПом. Если говорить про CL то эта парадигма «диалогового режима» никуда не делась.

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

показал где твой луп говно - на простейшем примере

Ты на простейшем примере обосрался по полной со своей кондиломой, которую хрен разберёшь без подсветки скобок. Луп выглядит на этом фоне простым и естественным как полено, а код понятен любому кто знает английский в объёме школьной программы.

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

я тебе уже сказал что это самое тупое что я слышал.

почему тогда вообще весь язык не смоллтолк если он не для программиста, а якобы для конечного пользователя? то есть давайте-ка сделаем одну часть языка для конечного пользователь, а все остальное, что бы норм было, для программиста?

ты мне говоришь про питонячий английский, который пахнет весь этот твой луп?

no-such-file ★★★★★ (05.04.22 13:24:00) идиот без аргументов, обыкновенный

ты не заслуживаешь больше моего внимания.

troy-harder
()
Ответ на: комментарий от troy-harder

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

Поздравляю, ты начал понимать что такое DSL.

ты не заслуживаешь больше моего внимания

Напрасно, мог бы хоть чему-то научится. Ну нет, так нет, ступай себе.

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

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

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

Про того, который будет пользоваться ЛИСП-системой.

У меня такой вопрос. Почему пользователю ЛИШП системы так важно иметь «вменяемый» синтаксис только для цикла, оставляя объявление функций, лямбд, классов, переменных и прочих операций обычными скобочными? Пользователь ЛИШП системы кроме циклов что-то пишет по-твоему?

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

Поздравляю, ты начал понимать что такое DSL.

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

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

troy-harder
()
Ответ на: комментарий от filosofia

оставляя объявление функций, лямбд, классов, переменных и прочих операций обычными скобочными

А что они где-то вообще безскобочные? Например

function foo(a, b) {
}

тут что ли нет скобок? В ЛИСПе есть ещё внешние скобки, так они и в лупе есть. С другой стороны есть например when вместо if чтобы меньше писанины было.

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

а нормальный итерейт для программистов

На практике его скобочность не находит применения, вот в чём дело. В 90% случаев это ненужно. А если скобки не нужны, то зачем «платить больше»?

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

А что они где-то вообще безскобочные?

foo a b = a + b

=)

Но вопрос был не в этом. Очевидно, лисп изобилует скобками и всякой мутью для построения «безсинтаксисного» AST, те же progn-костыли. Let зачастую облеплен скобками. Скобки везде кароч. Зачем из loop их убирать? Конечный пользователь ЛИШП системы может испытать диссонанс.

filosofia
()
Последнее исправление: filosofia (всего исправлений: 1)
Ответ на: комментарий от troy-harder

любой макрос - это dsl

Нет, не любой. Макросы вообще ортогональны понятию dsl.

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

=)

Это чит. =}

Зачем из loop их убирать?

Потому что можно.

Конечный пользователь ЛИШП системы может испытать диссонанс

Но он же не испытывает диссонанс когда пишет типа (a b &aux c) а не (a b (aux c)), хотя последнее логичнее. ЛИСП, по крайней мере CL это вообще практический язык. Тут многое сделано как удобнее, а не как академически чище.

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

Потому что можно.

Это возвращает нас к тому, что вся суть loop — «смотри как могу».

Понимаешь, ты же на пишешь

(let var a = 1
     var b = 2
     invoke + a b)

if-progn-else-progn ту да же. Вызов функций высших порядков обязательно обмазан lambda-скобками. В общем куда ни плюнь, скобок навалом.

(a b &aux c) а не (a b (aux c))
CL это вообще практический язык

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

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

Понимаешь, ты же на пишешь

Да?

(loop
  with a = 1
  with b = 2
  return (+ a b))

Я бы сказал, что это непродуманный язык

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

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

У него есть супер крутые семантические штуки, но синтаксически он не всем «заходит быстро», а некоторым «не заходит вообще»…

А свои озабоченные оценки можешь не расписывать…

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

90% случаев

мхм и в 10% лепим все в :do. плавали, знаем. да и дело не только в этом, а еще в угребищности и неоднородности того что получилось.

(a b &aux c) а не (a b (aux c)),

можно порадоваться, что лямбда листами не описываем алгоритмы.

Потому что можно.

еще можно сделать ридер, который делает из лиспа питон.

Макросы вообще ортогональны понятию dsl.

:facepalm: понятия то разные, это коню понятно, но любое использование макроса можно рассмотреть как использование специализированного языка для (мини-)задачи для которой был написан этот макрос. у тебя какое-то узкое понимание dsl. я не удивлюсь если ты ракетчик.

troy-harder
()
Ответ на: комментарий от troy-harder

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

Нельзя. Не любой макрос реализует какой-то язык. Вообще это довольно редкое применение.

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

Нельзя.

Нельзя одного человека - можно другого.

Если ты повелся на вот эту методичку ракетчиков

https://beautifulracket.com/appendix/domain-specific-languages.html

я только могу сказать: как легко нассать человеку в уши.

но любое использование макроса

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

но я не собираюсь спорить о манязначениях терминов. начал беспонтовый спор о терминах - ты слился.

troy-harder
()
Ответ на: комментарий от troy-harder

методичку ракетчиков

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

любое достаточно сложное или группу макросов

Ну т.е. таки не любое, а конкретно такое которое определяет dsl. Но это тавтология. Такое определение бессмысленно, о чём я и сказал.

я не собираюсь спорить

Ты уже один раз уходил, ага.

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

уходил? ты на половину тут всего не отвачаешь, мань.

Ну т.е. таки не любое,

зависит от желания порастягивать терминологию. я же четко и ясно написал, зачем вот это передергивание?

troy-harder
()
Ответ на: комментарий от troy-harder

уходил?

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

на половину тут всего не отвачаешь

Задавайте свои ответы. Я ж не могу отвечать на утверждения. Кое-что я комментирую, т.к. не вполне согласен с утверждениями, но это такое, «колхоз дело добровольное». Жаль что ты это так болезненно переживаешь.

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

Нитё нинаю, нулика нету так что он либо ошибка либо игнор. Так как массив с управляющий то нуль в нём может быть символом пропуска например или ещё чем. Я конечно сам себе напридумывал, но всё же :D

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

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

troy-harder
()
Ответ на: комментарий от LINUX-ORG-RU

или еще короче

#include <stdio.h>
#define SIZE 5

int main(void)
{
    int a[] = {1,2,3,4,5};
    int b[] = {6,7,8,9,10};
    int c[] = {11,-12,13,-14,-15};

    for (int i = 0; i < SIZE; printf("%i ", c[i]>0 ? a[i] : b[i]), i++);
}


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

для каждого положительного элемента третьей последовательности входит элемент первой, а для каждого отрицательного - элемент второй. Нуль считается положительным числом.

Всегда говорю, что программистов надо учить писать документацию, иначе выходит вот такое вот рукалицо:

Нуль считается положительным числом

Ты в школе не учился или наоборот прошёл весь матфак, что решил самостоятельно вводить определения? На следующей же странице кода все забудут твое определение и будут недоумевать (мягко говоря).

Вот так надо:

для каждого неотрицательного элемента третьей последовательности входит элемент первой, а для каждого отрицательного - элемент второй.

Либо поменять условия местами: для каждой отрицательной … иначе …

filosofia
()
Последнее исправление: filosofia (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

читабельность жи

#include <stdio.h>
#define SIZE 5

int main(void)
{
    int a[][SIZE]={{1,2,3,4,5},{6,7,8,9,10},{11,-12,13,-14,-15}};
    for (int i = 0; i < SIZE; printf("%i ", a[2][i]>0 ? a[0][i] : a[1][i]), i++);
}
olelookoe ★★★
()
Ответ на: комментарий от filosofia

Вот так надо: для каждого неотрицательного

Согласен, исправим в следующем спринте.

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

Ну и ладно, уполз назад в нору…

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