декоративный форк языка программирования 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:
if b then x else y
становится
if b x y.
Цитата: basta от мая 24, 2012, 18:02
if b then x else y
становится
if b x y.
Еще чуть-чуть, и вы изобретёте Tcl.
Цитата: Triton от мая 24, 2012, 19:22
Еще чуть-чуть, и вы изобретёте Tcl.
да ну бросьте, расстояние пешком до китая. тцл вообще какой-то фейспалм: мало динамической типизации, так ещё императивный.
Цитата: basta от мая 24, 2012, 20:36
Цитата: Triton от мая 24, 2012, 19:22
Еще чуть-чуть, и вы изобретёте Tcl.
да ну бросьте, расстояние пешком до китая. тцл вообще какой-то фейспалм: мало динамической типизации, так ещё императивный.
Вы б еще к Форту такие претензии предъявили. :)
Цитата: Triton от мая 25, 2012, 05:44
Вы б еще к Форту такие претензии предъявили. :)
и предъявлю. это мой персональный конланг.
Цитироватьбастакелл
Я подумал, что форк какого-то финноугорского.
Цитата: basta от мая 24, 2012, 18:00
и отступов
Цитата: basta от мая 24, 2012, 18:00
* табуляции, некрасивое форматирование и прочие мелочи -- провоцируют синтаксическую ошибку (форматтер-наци)
В лиспе был отступной синтаксис: http://srfi.schemers.org/srfi-49/srfi-49.html
Но что-то никто не спешит, стать отступником.
Цитата: basta от мая 24, 2012, 18:00
* всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным
Это рекомендаци, для претти принтера?
Цитата: 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
в лиспе и без скобок списки остаются списками неопределённой длины. в моёи языке таких мало, и те что есть, как раз окружены скобками.
А код, выходит--сам код не список и макросами не меняем? То есть, от лиспа только инфискная нотация, а самого важного--нет?!!
Цитата: basta от мая 25, 2012, 10:02
во всех же редакторах есть подсветка и выделения... впрочем цвета можно менять, главное чтобы эти пять различались.
Я уже подумал, может, вы цветом синтаксис кодировать--как в колорфорте! Ну, хранить тогда, не в плейнтексте, а с размеченными цветами--можно с минимальной разметкой цветов--было бы забавно, такой язык!
Цитата: fujhi от мая 25, 2012, 14:08
А код, выходит--сам код не список и макросами не меняем? То есть, от лиспа только инфискная нотация, а самого важного--нет?!!
(Вы хотели сказать префиксная.)
Нет же, списки никуда не деются! Просто когда у функции фиксированное число аргументов, то можно не писать скобки! Так и бывает в большинстве случаев, поэтому скобок -- мало. А в модуле начало файла понимается как открывающая скобка, а конец файла как закрывающая.
Цитата: fujhi от мая 25, 2012, 14:08
Я уже подумал, может, вы цветом синтаксис кодировать--как в колорфорте! Ну, хранить тогда, не в плейнтексте, а с размеченными цветами--можно с минимальной разметкой цветов--было бы забавно, такой язык!
прикольно, наверное...
Цитата: basta от мая 25, 2012, 14:41
(Вы хотели сказать префиксная.)
Ну, да.
Цитата: basta от мая 25, 2012, 14:41Нет же, списки никуда не деются! Просто когда у функции фиксированное число аргументов, то можно не писать скобки! Так и бывает в большинстве случаев, поэтому скобок -- мало.
Проблемы возникнут при передаче функций, как переменных! Статическая типизачия чуть спасает, но -- не совсем.
А если функция принимает переменное число параметров-функций и возвращает другую функцию--что делать?
Цитата: basta от мая 25, 2012, 14:41
прикольно, наверное...
Согласен, но отказ от плейнтекста--это слишком серьезная проблема.
Цитата: 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:
Цитата: basta от мая 25, 2012, 19:54
это как -- функция с переменным числом параметров? у меня такой нет. всё разновеликое засовывается в список ( : f1 f2 f3 ) и т.д. , и работа идёт уже через список, а число аргументов объявленной функции всегда постоянно... привели бы пример чтоли...
Пример? Вон в Лиспе все арифметические функции принимают любое число параметров.
(+ a b c d e)
Собственно, этим иногда и оправдывают скобки лиспа: зато можно любое число параметров передать.
Пример с переменным числом лямбд чуть сложнее придумать, но, думаю, и для такого польза найдётся.
ну а у меня аргументы засовываются в бесконечную, но единственную структуру -- список. пока повторяющиеся аргументы одного типа, даже выглядит как-то логичнее пользоваться списком, а иначе... даже не представляю такую задачу, где нужно такое не-знаю-что-не-знаю-сколько...
sum ( : a b c d e )
Цитата: 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 от мая 24, 2012, 18:00
> let = ( n ) Ratio 5
>
let = n
Ratio 5или
>
let = Ratio n
5
Цитата: 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
голая спецификация без реализации не нужна
в хаскель должно переводиться без проблем, за исключением форматтер-наци -- это посложнее будет написать, да.
Так напишите препроцессор же. Гораздо интереснее играться с тем, что уже́ есть, тогда лучше видно, чего не хватает и что плохо.
Цитата: wangjhenbai от июня 18, 2012, 17:14
Так напишите препроцессор же. Гораздо интереснее играться с тем, что уже́ есть, тогда лучше видно, чего не хватает и что плохо.
да и общение с компилятором помогает упорядочить мысли и понять чего я на самом деле не хочу.
а на чём писать и как выкладывать на обзор?
у меня вот линукс 3.2, и мне как-то совсем не хочется клепать ЕХЕшники.
думаю, free pascal — самый простой и дешёвый вариант.
Цитата: basta от июня 22, 2012, 19:43
а на чём писать
На том, что Вам нравится и в чём Вы наиболее продуктивны.
Цитата: basta от июня 22, 2012, 19:43
как выкладывать на обзор?
Уж как Вам удобно. :)
Цитата: basta от июня 22, 2012, 19:43
у меня вот линукс 3.2, и мне как-то совсем не хочется клепать ЕХЕшники.
думаю, free pascal — самый простой и дешёвый вариант.
Ы-нет, для фрыпаскаля как раз труъ-вариант — экзешники. Потому что нельзя ожидать, что у пользователя будет фрипаскаль, чтобы что-то скомпилировать.
Впрочем, на самом деле это не важно. На чём напишите, то будет. Главное — написать, переписать на другой язык потом не проблема.
вакаримасита.
Цитировать
Ы-нет, для фрыпаскаля как раз труъ-вариант — экзешники. Потому что нельзя ожидать, что у пользователя будет фрипаскаль, чтобы что-то скомпилировать.
а как же их дефис "write once, compile everywhere" ? компилятор идёт почти на все платформы (как и ГНУ Си, но я не люблю Си), пусть ставят и конпелируют сами же.
Можно на Lua написать, на схеме, на Ruby, на самом же Haskell. (Эти у меня есть просто. :eat:)
Удачи!
> всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным
первый раз вижу, чтоб колоризация исходного кода была частью спецификации языка! )))
Есть ещё ColorForth, если не ошибаюсь.