Змінюй хід війни! Допомагай ЗСУ!

А вот вам и новый язык. Зацените. Можно ругать.

  • Автор теми Автор теми batu
  • Дата створення Дата створення
Очень смешно. Вы сами то читали про что там? Или напомнить ваше утверждение? (что все ЯВУ узкоспециализированны и по другому никак) Там даже дан список этих самых 4GL, те которых в списках нету, по вашей логике не высокоуровневые языки?
Или для вас это одно и тоже? Как и ниже?
разве нет? можете назвать задачу, решение которой не выливается в итоге в последовательность инструкций процессора?
похоже на это :
- Мы будем писать по русски или по украински?
- По тетрадке!

Вы не понимаете разницу между ЯЗЫКОМ ассемблера и машинными кодами? :confused: А какая разница во что все транслируется?

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

Кстати у меня есть некая виртуальная машина и некий скрипт к ней, в какие инструкции процессора она выливается?
 
Останнє редагування:
Вам же сказали:


у этого языка - другие цели.:іржач:
И зря смеетесь. Не все языки создают программы. Например, HTML.

Но примеров я подкину. Сортировка как заказывали, и еще кое какие возможности.

Пример 1. Процедура сортировки массива A.

Sub Sort (A[]: Integer)
{
Dim ' Определение группы переменных
{ Integer ' Группа переменных одного типа
( I, ' Переменная внешнего цикла
J, ' Переменная внутреннего цикла
Count=Int(A.Lenght/2)-1, ' Конец внешнего цикла. Int-Целая часть.
NewCount ' Конец внутреннего цикла
)
}
Exp ' Определение выражений
{ Integer ' Одного типа
{ Next= J+1 ' Индекс следующего элемента
Last= A.Lenght-J-1 ' Индекс последнего элемента
Prev= A.Lenght-J-2 ' Индекс предпоследнего элемента
}
}
Block ' Определение блоков
{
ChangUp { If A[J]<A[Next] A[J]Обмен A[Next]} ' Операция обмена
ChangDown { If A[Prev]<A[Last] A[Prev]Обмен A[Last] }
}
If A.Lenght<2 Exit Sub Sort ' Если есть что сортировать
For I=0 To Count
{
NewCount:= A.Lenght-I-1
For J=I To NewCount {ChangUp ChangDown}
}
} ' Конец процедуры

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

Вычисление Nod с помощью создания класса автоматов.

Пример 2. Класс автоматов Nod с самостоятельным выключением.

Automation Nod ((I, J): Integer)
{
Starter (More, Less)
New More: Event {Condition=:I<J Connection.Add (| I.Chang, J.Change) Sub{J:=J-I}
New Less: Event {Condition=:I<J Connection.Add (| I.Chang, J.Change ) Sub{I:=I-J}
Public Eq: Event {Condition=:I=J Connection.Add (| I.Chang, J.Change ) Sub{Nod.Off}
}


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

Пример 3. Синхронизация с событием Eq, и выключение автомата Nod.

Dim Integer (A=5, B=35)
New Nod AV (A, B) Создание автомата Nod
AV.OnStart Включение одновременно со стартером.
Event {Connection=:Nod.Eq} Оператор синхронизации
Nod.Stop Выключение автомата Nod


Здесь оператором Event мы остановили выполнение программы до возникновения события Eq. Это можно сформулировать как синхронизацию с выполнением автомата до состояния Eq. В общем случае состояние автомата можно формулировать как событие, заключающееся в выполнении нескольких событий и можно считать событием и подписываться на него.

И пример логического разбора. Интерпретации. Определим следующие предикаты и инфиксную операцию возведения в степень.


Predicate
{
"Not Negative" (X: Integer) ‹X>=0›
Positive (X: Integer) ‹X>0›
Четное (X: Integer) ‹I И 1 =0›
}
Infix Integer "^" (X: Integer, I: "Not Negative") ' "^" – имя инфиксной операции
{ "^":=1
For Dim Integer J =0 To I {"^"*=X}
}

Теперь определим множество, на котором будет выполняться интерпретация. В нашем случае это множества целых чисел и объекты I и Y.

Dim Integer (I=-50000, Y=108)

Высказывание со знаком вопроса называется целевым высказыванием. И, соответственно, определим целевое высказывание.

If Positive (I ^ Y)?

Сейчас мы покажем как можно решить эту задачу без возведения в 108 степень. Для этого определим следующие высказывания на множестве Integer.


Utterance
{
ForAll (А: Integer, B: "Not Negative") ‹Positive (A) СЛЕДУЕТ Positive (A^B) ›
ForAll (А: Integer, B: "Not Negative")‹Четное (B) СЛЕДУЕТ Positive (A^B) ›
}
Эти высказывания можно читать так: Для всех целых А и целых не отрицательных B если A положительно, то и степень положительна. И если B четное, то результат возведения в степень четный.
Знак вопроса запускает не вычисления, а логический разбор на основе среды. На первом шаге резолюции ищем высказывания относительно заданного высказывания Positive (I ^ Y) на множестве функций "^", и находящееся в правой части после знака СЛЕДУЕТ. Что б исследовать дальше нельзя ли его упростить. Оказывается, у нас есть такой высказывание и не одно. Выбираем первое. Проверяем область действия (А: Integer: B: "Not Negative") и нас она нас устраивает. И, стало быть, мы можем смело полагаться на исследование высказывания в левой части от знака результата СЛЕДУЕТ. Это предикат Positive (A). Данный предикат уже упростить не возможно. Он вычисляется, (вместо А подставляем значение -5000) и дает отрицательный результат. При положительном результате вопрос был бы закрыт, но не все потеряно, у нас есть еще не проанализированное высказывание и область действия нас устраивает. Возвращаемся к нему. Проверяем предикат Четное (X: Integer) на истинность, подставляя в качестве параметра значение 108, и получаем положительный результат.
В общем случае если мы не получим результат с помощью интерпретаций, то у нас остается вариант просчитать непосредственно значение с помощью функции возведения в степень. (Императивное решение). Но есть еще один вариант.

если это высказывания сформулировать вот так.

Utterance
{
ForAll (А: Integer: B: "Not Negative") ‹Positive (A) И Четное (B) СЛЕДУЕТ Positive (A^B) ›
ForAll (А: Integer: B: "Not Negative") ‹¬ Positive (A) И ¬ Четное (B) СЛЕДУЕТ ¬ Positive (A^B) ›
}

Мы получим гарантированный ответ на целевое высказывание с помощью логического вывода.

P.S. В высказываниях не прошли знаки и/или и следует. Я их заменил текстом. Такая же беда с операцией обмена в блоках ChangUp и ChangDown . Ну, где-то так должно выглядеть.

С таким форматированием я б сам плюнул на такой язык. Редактировал в Worde. Там выглядело приличней. Уж простите.. Если скобки расположить правильно то будет выглядеть более читабельно.
 
Останнє редагування:
Очень смешно. Вы сами то читали про что там? Или напомнить ваше утверждение? (что все ЯВУ узкоспециализированны и по другому никак)
Не понимаю, Вы где-то нашли доказательство обратного или просто ебете мозги?

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

к слову, википеды запихнули этот Ваш ассемблер в языки общего назначения:
https://en.wikipedia.org/wiki/General-purpose_programming_language
мои соболезнования.
 
Не понимаю, Вы где-то нашли доказательство обратного или просто ебете мозги?
Вы еще и это не доказали. Я просто понимаю разницу между этим - A fourth-generation programming language (1970s-1990) (abbreviated 4GL) is a programming language or programming environment designed with a specific purpose in mind, such as the development of commercial business software
И аот этим - A high-level programming language is a programming language with strong abstraction from the details of the computer.

А вы - нет?
По по воду мозгов - сколько их надо, чтобы отрицать очевидное?
Ну да, можно даже вынуть процессор из компьютера, а виртуальная машина будет продолжать работать.
она ж у Вас наверно сферическая и в вакууме, угадал?
Ок. Если мы вернемся к началу, то вспомним, что разговор идет, о вашем утверждении о узкой специализации ЯВУ. Вы пытались мне доказать, что язык Ассемблера - язык широкого применения, но том, основании что все программы выливаются в последовательность инструкций процессора. При этом вы не понимаете что, ЯЗЫК ассемблера и машинные команды это не одно и то-же.
к слову, википеды запихнули этот Ваш ассемблер в языки общего назначения:
https://en.wikipedia.org/wiki/General-purpose_programming_language
мои соболезнования.
Да, или вы и разницу между общим назначением и широким применением тоже не понимаете? И упасть в обморок, если дочитывать до конца, то там в списке языков широкого применения есть и языки ЯВУ. Которые по вашим утверждениям -все узкоспециализированны и никак иначе!
Соболезнования!? Не смешите людей :іржач:

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

Ну, в принципе, и да и нет. В данном примере - да, выгодней, но это пример. При реализации на других языках такая задача тоже делается без функций. Хотя подход интересный, но при реализации больших задач, где действительно надо выносить код в отдельные функции компенсировать скорость можно за счет фастколов к примеру.
Перечитал доки, не понял по поводу области видимости переменных? Т.е. в примере с сортировкой понятно, что эта область ограничена Sub.
 
И зря смеетесь. Не все языки создают программы. Например, HTML.
да-да, есть еще язык жестов. тоже ведь язык.

Вы еще и это не доказали. Я просто понимаю разницу между этим - A fourth-generation programming language (1970s-1990) (abbreviated 4GL) is a programming language or programming environment designed with a specific purpose in mind, such as the development of commercial business software
И аот этим - A high-level programming language is a programming language with strong abstraction from the details of the computer.

А вы - нет?
По по воду мозгов - сколько их надо, чтобы отрицать очевидное?

Ок. Если мы вернемся к началу, то вспомним, что разговор идет, о вашем утверждении о узкой специализации ЯВУ. Вы пытались мне доказать, что язык Ассемблера - язык широкого применения, но том, основании что все программы выливаются в последовательность инструкций процессора. При этом вы не понимаете что, ЯЗЫК ассемблера и машинные команды это не одно и то-же.

Да, или вы и разницу между общим назначением и широким применением тоже не понимаете? И упасть в обморок, если дочитывать до конца, то там в списке языков широкого применения есть и языки ЯВУ. Которые по вашим утверждениям -все узкоспециализированны и никак иначе!
Соболезнования!? Не смешите людей :іржач:
какая-то терминологическая хуита.
 
да-да, есть еще язык жестов. тоже ведь язык.

Ты будешь удивлен, но HTML - компьютерный язык.

да-да, есть еще язык жестов. тоже ведь язык.

какая-то терминологическая хуита.

Да понятно что таким гениям как ты термины не нужны, ты кинул две ссылку друг друга опровергающие. Ты в начале спорол чушь, а потом пытаясь оправдать ее, напорол еще больше. Мне интересна, что с такими познаниями ты делаешь в теме про новые компьютерные языки, если ты о старых то имеешь очень слабое представление? :іржач:

В принципе слив тебе защитан ))))
 
Ты будешь удивлен, но HTML - компьютерный язык.
Really?:eek:
и что, из этого следует, что целью создания языка программирования не является написание программ на оном?

Да понятно что таким гениям как ты термины не нужны, ты кинул две ссылку друг друга опровергающие.
Перепешите википедию, исправив противоречие. Наверняка Вам скажут спасибо.

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

Использование блоков и выражений в этой процедуре делает ее более читабельной.
ага, в той же мере в какой использвание сокращений, расшифрованных на другой странице, делает текст более понятным.
 
признаю свою лажу.
:пиво:
давай заменим "язык высокого уровня" на "декларативный язык программирования" и закончим буквоёбство
Согласен. ТС уже дал примеры, лучше вернутся к ним.

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

PS Это не мелкие придирки, а вопрос, остальных плюсов от блоков еще не понял. Остальные примеры еще разбираю.
 
Редактировал в Worde.
так вот кто программирует на микрософт ворд! ))) похвально.

Там выглядело приличней. Уж простите.. Если скобки расположить правильно то будет выглядеть более читабельно.
ептг, а кнопку CODE нажать религия не позволяет?
только лучше от этого не станет. я никак не пойму, у вас оператор присвоения - [=] или [:=]?
или это такой прямолинейный синтаксис, кто в лес, кто в партизаны?

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

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

но кстати и эта проблема уже давно решена:

1. Бизнес-процессы:
Код:
<process name="ncname" targetNamespace="uri"
queryLanguage="anyURI"?
expressionLanguage="anyURI"?
suppressJoinFailure="yes|no"?
enableInstanceCompensation="yes|no"?
abstractProcess="yes|no"?
xmlns="https://schemas.xmlsoap.org/ws/2002/07/business-process/">
<partners>?
<!-- Note: At least one role must be specified. -->
<partner name="ncname" serviceLinkType="qname"
myRole="ncname"? partnerRole="ncname"?>+
</partner>
</partners>
<containers>?
<!-- Note: The message type may be indicated with the messageType
attribute or with an inlined <wsdl:message> element within. -->
<container name="ncname" messageType="qname"?>
<wsdl:message name="ncname">?
...
</wsdl:message>
</container>
</containers>
<correlationSets>?
<correlationSet name="ncname" properties="qname-list"/>+
</correlationSets>
<faultHandlers>?
<!-- Note: There must be at least one fault handler or default. -->
<catch faultName="qname"? faultContainer="ncname"?>*
activity
</catch>
<catchAll>?
activity
</catchAll>
</faultHandlers>
<compensationHandler>?
activity
</compensationHandler>
activity
</process>

2. Матмоделирование
Код:
<model
     name="simple_electrophysiological_model"
     xmlns="https://www.cellml.org/cellml/1.1#"
     xmlns:cellml="https://www.cellml.org/cellml/1.1#">
   
   ...
 
   <component name="extra_cellular_space">
     ...
     <math xmlns="https://www.w3.org/1998/Math/MathML">
       <apply><eq />
         <apply><diff />
           <bvar><ci> time </ci></bvar>
           <ci> Na </ci>
         </apply>
         <apply><times />
           <cn cellml:units="dimensionless"> -1.0 </cn>
           <ci> I_Na </ci>
         </apply>
        </apply>
        ...
     </math>  
   </component>
 
   ...
 
 </model>

GUI:
Код:
<window id="vbox example" title="Example"
xmlns="https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <vbox>
    <button id="yes" label="Yes"/>
    <button id="no" label="No"/>
    <button id="maybe" label="Maybe"/>
  </vbox>
</window>

Упс! кажется я только что решил проблему над которой ТС бился годами:
А есть еще и средства для создания баз данных, для описания техпроцессов и все это очень, очень разные вещи. Вот объединить все это в единое целое, с единым синтаксисом и философией...
 
Останнє редагування:
только лучше от этого не станет. я никак не пойму, у вас оператор присвоения - [=] или [:=]?
или это такой прямолинейный синтаксис, кто в лес, кто в партизаны?
Три оператора присваивания. Обычный [:=] который транслируется в команду Move. Оператор присвоения значений свойствам [=:]. Его назначение похоже на присвоение в скриптовых языках. Значение свойства сохраняется в двоичном формате объекта, и не требует команды Move, а загружается в память вместе с объектом. И есть синтаксическая форма присвоения начального значения [=]. Применяется как специальный синтаксис, например, в операторе For. В какую форму это присвоение выльется зависит от конкретного оператора.
Подробнее выглядит так.
Form А {Size=:20;120}
Этот оператор создаст форму с соответствующими размерами, и так она и будет сохранена в двоичном коде после трансляции и так будет загружаться. А такое присвоение.

Form А
А.Size:=20;120
Присвоит значения во время выполнения.

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

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

но кстати и эта проблема уже давно решена:

1. Бизнес-процессы:
Код:
<process name="ncname" targetNamespace="uri"
queryLanguage="anyURI"?
expressionLanguage="anyURI"?
suppressJoinFailure="yes|no"?
enableInstanceCompensation="yes|no"?
abstractProcess="yes|no"?
xmlns="https://schemas.xmlsoap.org/ws/2002/07/business-process/">
<partners>?
<!-- Note: At least one role must be specified. -->
<partner name="ncname" serviceLinkType="qname"
myRole="ncname"? partnerRole="ncname"?>+
</partner>
</partners>
<containers>?
<!-- Note: The message type may be indicated with the messageType
attribute or with an inlined <wsdl:message> element within. -->
<container name="ncname" messageType="qname"?>
<wsdl:message name="ncname">?
...
</wsdl:message>
</container>
</containers>
<correlationSets>?
<correlationSet name="ncname" properties="qname-list"/>+
</correlationSets>
<faultHandlers>?
<!-- Note: There must be at least one fault handler or default. -->
<catch faultName="qname"? faultContainer="ncname"?>*
activity
</catch>
<catchAll>?
activity
</catchAll>
</faultHandlers>
<compensationHandler>?
activity
</compensationHandler>
activity
</process>
Я бы не назвал это наглядным. Потому существует язык TTL, нечто похожее на это, но он выполняет роль ассемблера для Lada. Писать на нем можно, но несколько напряжно. Да и отношение к Алголу, Паскалю и бейсику у меня не самое плохое. К синтаксису C у меня значительно больше претензий. И есть аргументы.
 
Три оператора присваивания.
748751.jpg


Я бы не назвал это наглядным. Потому существует язык TTL, нечто похожее на это, но он выполняет роль ассемблера для Lada.
нечто похожее на декларативные специализированные языки программирования выполняет роль ассемблера?? а... о..
..
shorton.jpg


Да и отношение к Алголу, Паскалю и бейсику у меня не самое плохое. К синтаксису C у меня значительно больше претензий. И есть аргументы.
Ну да, это ведь так весело писать MotherFuckingVariable := MotherFackingVariable + 2 вместо MotherFuckingVariable += 2 потому что создателю языка захотелось BDSM с вынужденно изучающими его студентами.
 
нечто похожее на декларативные специализированные языки программирования выполняет роль ассемблера?? а... о..
..
Да. А что? Очень простой синтаксис. Самое то, что надо для простого транслятора, да и изучения. Посмотри. Пару страниц и ты спец в языке TTL. А соответствие взаимно-однозначное и с виртуальной машиной и с языком высокого уровня.

Ну да, это ведь так весело писать MotherFuckingVariable := MotherFackingVariable + 2 вместо MotherFuckingVariable += 2 потому что создателю языка захотелось BDSM с вынужденно изучающими его студентами.
Это детский сад. Читай внимательно. В Ladу все это есть. И даже больше. Только удели внимание там есть раздел про оператор присваивания. И еще кое-какие операторы есть.. Например, Swith. И группирование If-ов мне кажется интересно.

Хотел добавить к примерам создания формы. Любой объект можно создать синтаксисом
Объект="Класс объекта" "Имя объекта" Реализация
Реализация это в фигурных скобках присвоение значений свойств и фукционал объекта. Операторы, новые свойства, методы или события создаваемого объекта. Тонкость только в том что этот объект создастся на месте где он создается. Для создания динамических объектов необходимо к объекту применить оператор Dim или New (который создает объекты класса Dim или New в месте написания). И тогда синаксис выгядит, например, так

Динамический объект=Модификатор "Dim" Объект

Или в написании
Public New Form А {Size=:20;120}
Еще раз напомню что оператор New это тоже объект класса New, который расположен в месте где написан, и при выполнении выделяет память и создает объект в нашем случае класса Form. Ну, дальше как обычно

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

И потому операторы тоже могут иметь имя. Очень удобно для выхода оператором Exit, но и так как программа является документом, ее можно анализировать. Например, искать объекты с определенным именем. Операторы такие же объекты с точки зрения анализа программы как документа :)
 
Останнє редагування:
Пример 1. Процедура сортировки массива A.

Sub Sort (A[]: Integer)
{
Dim ' Определение группы переменных
{ Integer ' Группа переменных одного типа
( I, ' Переменная внешнего цикла
J, ' Переменная внутреннего цикла
Count=Int(A.Lenght/2)-1, ' Конец внешнего цикла. Int-Целая часть.
NewCount ' Конец внутреннего цикла
)
}
Exp ' Определение выражений
{ Integer ' Одного типа
{ Next= J+1 ' Индекс следующего элемента
Last= A.Lenght-J-1 ' Индекс последнего элемента
Prev= A.Lenght-J-2 ' Индекс предпоследнего элемента
}
}
Block ' Определение блоков
{
ChangUp { If A[J]<A[Next] A[J]Обмен A[Next]} ' Операция обмена
ChangDown { If A[Prev]<A[Last] A[Prev]Обмен A[Last] }
}
If A.Lenght<2 Exit Sub Sort ' Если есть что сортировать
For I=0 To Count
{
NewCount:= A.Lenght-I-1
For J=I To NewCount {ChangUp ChangDown}
}
} ' Конец процедуры

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




:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D

Алгоритм быстрой сортировки на Haskell:

fsort [] = []
fsort (x:xs) = fsort [y | y <- xs, y < x ] ++ [x] ++ fsort [y | y <- xs, y >= x]

batu, если у вас много свободного времени - сделайте что то полезное для общества, уберите снег, посбивайте сосульки с крыш... А весной приходите поступать на первый курс профильного ВУЗа.

Операторы такие же объекты с точки зрения анализа программы как документа :)

Бред.
 
:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D

Алгоритм быстрой сортировки на Haskell:

fsort [] = []
fsort (x:xs) = fsort [y | y <- xs, y < x ] ++ [x] ++ fsort [y | y <- xs, y >= x]

batu, если у вас много свободного времени - сделайте что то полезное для общества, уберите снег, посбивайте сосульки с крыш... А весной приходите поступать на первый курс профильного ВУЗа.



Бред.
Сделаю несколько замечаний. Это решение методом функционального программирования. Выглядит проще. Насчет эффективности отнюдь. Одна операция разделения и соединения чего стоит. А рекурсия во что обходится? Я уже не говорю что эта сортировка с одной стороны, а у меня с двух сторон. Так что это алгоритм "очень не быстрой сортировки". А потом существенная часть сортировки у меня не такая уж и сложная. Вот всего лишь.

For I=0 To Count
{
NewCount:= A.Lenght-I-1
For J=I To NewCount {ChangUp ChangDown}
}

Ну, и, наконец, на Lade эту задачу так же можно решить методом функионального программирования. Как-нибудь напишу. Пример, который я привел показывает совсем другие вещи. И, наконец, главное. Использовать тот или другой метод программирования надо тогда, когда это имеет смысл. Именно, для этого в Lade есть выбор. Использовать средства фунционального программирования имеет смысл там, где это имеет смысл. И никак не для сортировок. Вот для синтаксического анализа, это очень мудро. Для других задач использовать автоматы, или логическое программирование. Для редактирования данных другие методы. Пользуйтесь и не зацикливайтесь. Есть все!!!

И вообще.. Убрал комментарии. Получилось не так страшно:).
Код:
Sub Sort (A[]: Integer)
{
  Dim Integer (I, J, Count=Int(A.Lenght/2)-1, NewCount )
  Exp Integer {Next= J+1 Last= A.Lenght-J-1  Prev= A.Lenght-J-2}       
  Block {
       ChangUp    { If A[J]<A[Next] A[J] ОБМЕН A[Next]} 
       ChangDown{ If A[Prev]<A[Last] A[Prev] ОБМЕН A[Last]}
          }
  If A.Lenght<2  Exit Sub Sort
  For I=0 To Count
    {
      NewCount:= A.Lenght-I-1
      For J=I To NewCount {ChangUp ChangDown}
    }
} ' Конец процедуры
 
поскольку взывать к здравому смыслу уже поздно, давайте поступим проще.
Вы скажете в каком совете Вы намерены пропихнуть эту кандидатскую
(только не говорите, что это докторская, моя вера в отечественную науку навсегда рухнет)
и на каких конференциях представить.

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

а я Вам скажу, где лучше не стоит...
Я нигде не говорил что это работа научная. Я говорил что это бизнес-проект и я его делаю самостоятельно. Консультируюсь это да. Вот и здесь тоже разместил.
Самостоятельно это значит за свой счет, страх и риск. Про инвесторов я говорил что есть, но не злоупотребляю пока не буду на сто процентов уверен это раз, и два пока не соберу коллектив единомышленников. Т.е. людей понимающих и желающих сделать именно то, что предлагается. Замечания исправления в полный рост одобряются. Вплоть до изменения имени проекта. Это все рабочие варианты, а не догма.
Насчет веры в отечественную науку совсем не понял. Я вам не скажу за всю науку, но умные люди есть. Или ты себя относишь к другим? Я, например, здесь вижу много далеко не глупых. К ним и обращаюсь.

И в науке тоже много далеко не глупых. Так что этот форум не единственное и уникальное место в нашем отечестве:) Уж не знаю кого благодарить...
 
Замечания исправления в полный рост одобряются.
...и не рассматриваются. мы уже заметили.

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


*для справки. любая работа с такими замашками должна быть в той или иной степени научной.
нет публикаций, не рецензий - все ясно. каждый зарабатывает чем умеет.
 
Останнє редагування:
Сделаю несколько замечаний. Это решение методом функционального программирования. Выглядит проще. Насчет эффективности отнюдь. Одна операция разделения и соединения чего стоит. А рекурсия во что обходится?

Вы простите, как определили там рекурсию, то что она записана на языке Haskell - абсолютно не означает, что компилятор ее не развернет в цикл.

Вы как уж на сковородке, то доказываете, что производительность не важна - а главное компактность кода, то доказываете, что у вас эффективнее решение. Но позвольте, где факты? Я могу замерить и выдать время работы этой функции и показать, что время ее работы не уступает функции реализованной на С, а сложность алгоритма O(n log n). А вы можете замерить время работы своей функции? Боюсь, что нет. Так о какой эффективности идет речь? Сплошная болтовня.

Вы за два месяца были не в состоянии освоить Haskell, язык которому обучить проще чем С++.
Какова логика? Не можете разобраться в чужем языке, решили написать свой?
 
Вы как уж на сковородке, то доказываете, что производительность не важна - а главное компактность кода, то доказываете, что у вас эффективнее решение.
а ему пофиг, главное увести дискуссию к деталям, подальше от сомнений в жизнеспособности Великой Идеи вообще
и проблем, которые обязательно должны быть разрешены для ее мало-мальски съедобной реализации, в частности.
боже, как мне это все знакомо....
 
Останнє редагування:
Вы простите, как определили там рекурсию, то что она записана на языке Haskell - абсолютно не означает, что компилятор ее не развернет в цикл.

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

Какие еще факты нужны? Вы вызываете функцию рекурсивно. Или вы не знаете как реализован ваш Haskell? Который я не выучил... Но, знаю как работает.. Интресно как бы я расшифровал вашу программу если б не знал языка. И еще.. Где это я говорил что производителность не важна?
В цикл не развернет. Транслятор не знает длины списка. Да и что толку? Будет в цикле тот же рекурсивный вызов процедур.
Я могу замерить и выдать время работы этой функции и показать, что время ее работы не уступает функции реализованной на С, а сложность алгоритма O(n log n). А вы можете замерить время работы своей функции? Боюсь, что нет. Так о какой эффективности идет речь? Сплошная болтовня.
Сложность и эффективность это разные вещи. Не знаю что вы собрались замерять, но эффективность своей программы вы посчитали не правильно. Правильно O(n(O(n-1)). Так вот вот эта внутренняя O у вас еще занята вызовом двух функций и два раза разделением списка на две части (в Haskell реализован список) головы и хвоста, и соединением этого списка. Т.е. большая. Это к тому что я не умею и не знаю. И не в состоянии освоить...
Эффективность моей программы O((n-1)/2(O(n/2))). И никаких рекурсий.
Вы за два месяца были не в состоянии освоить Haskell, язык которому обучить проще чем С++.
Какова логика? Не можете разобраться в чужем языке, решили написать свой?
Может вы и освоили язык, но как он работает еще плохо усвоили. ИМХО и пример содрали. Потому как не вижу определения сортируемого списка.Понимаю что для Haskell это без разницы.. Но все же..
 
Назад
Зверху Знизу