Лингвофорум

Теоретический раздел => Интерлингвистика и лингвопроектирование => Конланги лингвофорумчан => Тема начата: basta от мая 24, 2012, 18:00

Название: бастакелл
Отправлено: basta от мая 24, 2012, 18:00
декоративный форк языка программирования haskell. есть какое-то тяготение к лиспу, да...

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

объявление функции:
= ( fun a b c d e f g k n )
  / a
    div * b c
        sum ( : d e f g ^ k n )


для сравнения то же в s-выражениях:
(= (fun a b c d e f g k n)
   (/ a
      (div (* b c)
           (sum (list d e f g (^ k n)))


и на оригинальном хачкеле:
fun a b c d e f g k n = a / (div (b * c) (sum [d, e, f, g, k^n]))

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

Символы: 'a, 'b, '0, '\n, '\t, ...
Строки: "Нивы сжаты, \"рощи голы', от воды\\ туман и сырость.\n" даёт: Нивы сжаты, "рощи голы', от воды\ туман и сырость. -- и переносит строку.
Списки: ( : a b c d e )
Кортежи: ( , a b c d e )
Комменты: --это спасительный комментарий
{-И это тоже. И не надо их вкладывать друг в друга.-}

и т.д. в таком же духе.
даже так ( import Data.List Ratio Monads MyYoModule )

необязательное ручное типование 1) перед объявлением функции или переменной, или 2) перед значением
= ( Int fun Num a Eq b Int c Int d Int e f g Int k n )--внимание: здесь f, g и n будут выводиться автоматически!
то же самое:
= ( ( -> Num c Eq b Int Int Int a a Int a Int ) fun a b c d e f g k n )
вбиваем в воображаемый интерпретатор:
> let = ( n ) Ratio 5
> n
5/1


весьма сносно получилось :smoke:
Название: бастакелл
Отправлено: basta от мая 24, 2012, 18:02
if b then x else y
становится
if b x y.
Название: бастакелл
Отправлено: Triton от мая 24, 2012, 19:22
Цитата: basta от мая 24, 2012, 18:02
if b then x else y
становится
if b x y.
Еще чуть-чуть, и вы изобретёте Tcl.
Название: бастакелл
Отправлено: basta от мая 24, 2012, 20:36
Цитата: Triton от мая 24, 2012, 19:22
Еще чуть-чуть, и вы изобретёте Tcl.
да ну бросьте, расстояние пешком до китая. тцл вообще какой-то фейспалм: мало динамической типизации, так ещё императивный.
Название: бастакелл
Отправлено: Triton от мая 25, 2012, 05:44
Цитата: basta от мая 24, 2012, 20:36
Цитата: Triton от мая 24, 2012, 19:22
Еще чуть-чуть, и вы изобретёте Tcl.
да ну бросьте, расстояние пешком до китая. тцл вообще какой-то фейспалм: мало динамической типизации, так ещё императивный.
Вы б еще к Форту такие претензии предъявили.  :)
Название: бастакелл
Отправлено: basta от мая 25, 2012, 09:29
Цитата: Triton от мая 25, 2012, 05:44
Вы б еще к Форту такие претензии предъявили.  :)
и предъявлю. это мой персональный конланг.
Название: бастакелл
Отправлено: maristo от мая 25, 2012, 09:44
Цитироватьбастакелл

Я подумал, что форк какого-то финноугорского.
Название: бастакелл
Отправлено: fujhi от мая 25, 2012, 09:46
Цитата: basta от мая 24, 2012, 18:00
и отступов
Цитата: basta от мая 24, 2012, 18:00
* табуляции, некрасивое форматирование и прочие мелочи -- провоцируют синтаксическую ошибку (форматтер-наци)
В лиспе был отступной синтаксис: http://srfi.schemers.org/srfi-49/srfi-49.html
Но что-то никто не спешит, стать отступником.

Цитата: basta от мая 24, 2012, 18:00
* всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным
Это рекомендаци, для претти принтера?
Название: бастакелл
Отправлено: basta от мая 25, 2012, 10:02
Цитата: maristo от мая 25, 2012, 09:44
Цитироватьбастакелл
Я подумал, что форк какого-то финноугорского.
да, вы попались на мою уловку.

Цитата: fujhi от мая 25, 2012, 09:46
Цитата: basta от мая 24, 2012, 18:00
и отступов
Цитата: basta от мая 24, 2012, 18:00
* табуляции, некрасивое форматирование и прочие мелочи -- провоцируют синтаксическую ошибку (форматтер-наци)
В лиспе был отступной синтаксис: http://srfi.schemers.org/srfi-49/srfi-49.html
Но что-то никто не спешит, стать отступником.
в лиспе и без скобок списки остаются списками неопределённой длины. в моёи языке таких мало, и те что есть, как раз окружены скобками. наверняка без скобок не удобно их юзать.

Цитировать
Цитата: basta от мая 24, 2012, 18:00
* всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным
Это рекомендаци, для претти принтера?
во всех же редакторах есть подсветка и выделения... впрочем цвета можно менять, главное чтобы эти пять различались.
Название: бастакелл
Отправлено: fujhi от мая 25, 2012, 14:08
Цитата: basta от мая 25, 2012, 10:02
в лиспе и без скобок списки остаются списками неопределённой длины. в моёи языке таких мало, и те что есть, как раз окружены скобками.
А код, выходит--сам код не список и макросами не меняем? То есть, от лиспа только инфискная нотация, а самого важного--нет?!!

Цитата: basta от мая 25, 2012, 10:02
во всех же редакторах есть подсветка и выделения... впрочем цвета можно менять, главное чтобы эти пять различались.
Я уже подумал, может, вы цветом синтаксис кодировать--как в колорфорте! Ну, хранить тогда, не в плейнтексте, а с размеченными цветами--можно с минимальной разметкой цветов--было бы забавно, такой язык!
Название: бастакелл
Отправлено: basta от мая 25, 2012, 14:41
Цитата: fujhi от мая 25, 2012, 14:08
А код, выходит--сам код не список и макросами не меняем? То есть, от лиспа только инфискная нотация, а самого важного--нет?!!
(Вы хотели сказать префиксная.)

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

Цитата: fujhi от мая 25, 2012, 14:08
Я уже подумал, может, вы цветом синтаксис кодировать--как в колорфорте! Ну, хранить тогда, не в плейнтексте, а с размеченными цветами--можно с минимальной разметкой цветов--было бы забавно, такой язык!
прикольно, наверное...
Название: бастакелл
Отправлено: fujhi от мая 25, 2012, 14:52
Цитата: basta от мая 25, 2012, 14:41
(Вы хотели сказать префиксная.)
Ну, да.

Цитата: basta от мая 25, 2012, 14:41Нет же, списки никуда не деются! Просто когда у функции фиксированное число аргументов, то можно не писать скобки! Так и бывает в большинстве случаев, поэтому скобок -- мало.
Проблемы возникнут при передаче функций, как переменных! Статическая типизачия чуть спасает, но -- не совсем.

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

Цитата: basta от мая 25, 2012, 14:41
прикольно, наверное...
Согласен, но отказ от плейнтекста--это слишком серьезная проблема.
Название: бастакелл
Отправлено: basta от мая 25, 2012, 19:54
Цитата: fujhi от мая 25, 2012, 14:52
Проблемы возникнут при передаче функций, как переменных! Статическая типизачия чуть спасает, но -- не совсем.
у функций высших порядков просто выше приоритет. они берут функцию за рога до того как она успеет попросить аргументов.

хаскелл:
map (1+) [1,2,3..]
или с лямбдой
map (\x->x+1) [1,2,3..]

бастакелл:
map \ x + x 1 ( :.. 1 2 )

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

ЦитироватьА если функция принимает переменное число параметров-функций и возвращает другую функцию--что делать?
это как -- функция с переменным числом параметров? у меня такой нет. всё разновеликое засовывается в список ( : f1 f2 f3 ) и т.д. , и работа идёт уже через список, а число аргументов объявленной функции всегда постоянно... привели бы пример чтоли...

вот склеивание функций:

= ( f g h )
  \ (
x y z )
    + (
g x )
      (
h y z )


или так

= ( ( -> a a a ) f ( -> a a ) g ( -> a a a ) h )
  \ (
x y z )
    +
g x
      h y z


допустим
= m f negate *
тогда
m 5 2 3
даёт
1

главное не переусложнить синтаксис сейчас :umnik:
Название: бастакелл
Отправлено: fujhi от мая 25, 2012, 20:09
Цитата: basta от мая 25, 2012, 19:54
это как -- функция с переменным числом параметров? у меня такой нет. всё разновеликое засовывается в список ( : f1 f2 f3 ) и т.д. , и работа идёт уже через список, а число аргументов объявленной функции всегда постоянно... привели бы пример чтоли...
Пример? Вон в Лиспе все арифметические функции принимают любое число параметров.

(+ a b c d e)

Собственно, этим иногда и оправдывают скобки лиспа: зато можно любое число параметров передать.

Пример с переменным числом лямбд чуть сложнее придумать, но, думаю, и для такого польза найдётся.
Название: бастакелл
Отправлено: basta от мая 26, 2012, 18:44
ну а у меня аргументы засовываются в бесконечную, но единственную структуру -- список. пока повторяющиеся аргументы одного типа, даже выглядит как-то логичнее пользоваться списком, а иначе... даже не представляю такую задачу, где нужно такое не-знаю-что-не-знаю-сколько...

sum ( : a b c d e )
Название: бастакелл
Отправлено: basta от мая 26, 2012, 18:46
Цитата: basta от мая 25, 2012, 19:54
= ( ( -> a a a ) f ( -> a a ) g ( -> a a a ) h )
= ( ( -> a a a a ) f ( -> a a ) g ( -> a a a ) h )
Название: бастакелл
Отправлено: basta от мая 26, 2012, 18:47
Цитата: basta от мая 24, 2012, 18:00
> let = ( n ) Ratio 5
> let = n Ratio 5
или
> let = Ratio n 5
Название: бастакелл
Отправлено: basta от июня 18, 2012, 16:53
Цитата: basta от мая 24, 2012, 18:00
объявление функции:
= ( fun a b c d e f g k n )
  / a
    div * b c
        sum ( : d e f g ^ k n )

Цитировать= Ratio n 5
поскольку заранее известно, конечно ли число аргументов у функции или нет (предполагается что в объявлении функции всегда бесконечно), постольку необязательно писать открывающую скобку -- детектор такой функции. вот и назрела реформа. оставшаяся закрывающая скобка выглядит очень одиноко, поэтому я её заменю на точку. вообще в хаскеле точка уже занята, но ту я выкинул. если кому-нибудь пригодится этот композитор -- без труда напишут сами. та точка, вроде как, решала проблемы интефиксности и приоритетов, которые сейчас поотваливались.

= Ratio n . 5

= fun a b c d e f g k n .
  /
a
    div * b c
        sum : d e f g ^ k n .


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

= fun a b c d e f g k n . / a div * b c sum : d e f g ^ k n .

бесскобочный лисп так не может, потому что лисп так не может by design. если я правильно понимаю, в хаскеле, в отличие от лиспа, нет ни одной функции (или -оида) с неопределённым числом аргументов. тот же список [1, 2, 3, 4, 146] расписывается как много двухместных конструкторов 1:2:3:4:146:[] и т.д.. так бы и шло, но отказ от инфиксности видимо стоит именно столько: приходиться для удобства ввести в язык лиспосписки. может можно как-то по-другому? или лучше впустить в язык немножко инфиксности (смириться с тем что иногда это удобно...)? или, отчаявшись, писать : : : : : 1 2 3 4 146 []? посоветуйте.

полный перечень бесконечных синтаксических структур в моём языке, требующих одну точку:
import
:
,
|

косвенно (то есть после них обязательно идёт такая структура, но сами они конечные):
=
data

возможно какие-то забыл, какие ещё даже не знаю (да, я пока что сопливый ваннаби-хаске-хакер).

hs: data Школьники = Иван | Петян | Роман | Степан
bs: data Школьники . | Иван Петян Роман Степан .
Название: бастакелл
Отправлено: wangjhenbai от июня 18, 2012, 16:55
голая спецификация без реализации не нужна
Название: бастакелл
Отправлено: basta от июня 18, 2012, 17:07
Цитата: wangjhenbai от июня 18, 2012, 16:55
голая спецификация без реализации не нужна
в хаскель должно переводиться без проблем, за исключением форматтер-наци -- это посложнее будет написать, да.
Название: бастакелл
Отправлено: wangjhenbai от июня 18, 2012, 17:14
Так напишите препроцессор же. Гораздо интереснее играться с тем, что уже́ есть, тогда лучше видно, чего не хватает и что плохо.
Название: бастакелл
Отправлено: basta от июня 22, 2012, 19:43
Цитата: wangjhenbai от июня 18, 2012, 17:14
Так напишите препроцессор же. Гораздо интереснее играться с тем, что уже́ есть, тогда лучше видно, чего не хватает и что плохо.
да и общение с компилятором помогает упорядочить мысли и понять чего я на самом деле не хочу.
а на чём писать и как выкладывать на обзор?
у меня вот линукс 3.2, и мне как-то совсем не хочется клепать ЕХЕшники.
думаю, free pascal — самый простой и дешёвый вариант.
Название: бастакелл
Отправлено: wangjhenbai от июня 22, 2012, 20:41
Цитата: basta от июня 22, 2012, 19:43
а на чём писать
На том, что Вам нравится и в чём Вы наиболее продуктивны.

Цитата: basta от июня 22, 2012, 19:43
как выкладывать на обзор?
Уж как Вам удобно. :)

Цитата: basta от июня 22, 2012, 19:43
у меня вот линукс 3.2, и мне как-то совсем не хочется клепать ЕХЕшники.
думаю, free pascal — самый простой и дешёвый вариант.
Ы-нет, для фрыпаскаля как раз труъ-вариант — экзешники. Потому что нельзя ожидать, что у пользователя будет фрипаскаль, чтобы что-то скомпилировать.

Впрочем, на самом деле это не важно. На чём напишите, то будет. Главное — написать, переписать на другой язык потом не проблема.
Название: бастакелл
Отправлено: basta от июня 22, 2012, 21:47
вакаримасита.

Цитировать
Ы-нет, для фрыпаскаля как раз труъ-вариант — экзешники. Потому что нельзя ожидать, что у пользователя будет фрипаскаль, чтобы что-то скомпилировать.
а как же их дефис "write once, compile everywhere" ? компилятор идёт почти на все платформы (как и ГНУ Си, но я не люблю Си), пусть ставят и конпелируют сами же.
Название: бастакелл
Отправлено: arseniiv от июня 28, 2012, 13:51
Можно на Lua написать, на схеме, на Ruby, на самом же Haskell. (Эти у меня есть просто. :eat:)

Удачи!
Название: бастакелл
Отправлено: trilirium от июля 2, 2013, 19:16
> всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным

первый раз вижу, чтоб колоризация исходного кода была частью спецификации языка! )))
Название: бастакелл
Отправлено: arseniiv от июля 5, 2013, 15:22
Есть ещё ColorForth, если не ошибаюсь.