Удосконалена версія GolfScript [закрита]


12

Я планую написати вдосконалений GolfScript для ще коротших програм, які можуть робити більше справ. Це не виклик; це запит про зворотний зв'язок та підказки щодо того, що мені робити. (див. теги)

Я не впевнений, чи має це бути Community Wiki. Якщо ви так вважаєте, просто позначте модератора, щоб перетворити його :)

Ця мова буде дуже схожа на GolfScript. Це все ще написано в Рубі. Однак він має кілька відмінностей:

  • Використовуючи `як роздільник рядків, тому що це нечастий характер, тому знадобиться менше пробігу. (Інший символ може замінити свою функцію, як-от #(докладніше про це пізніше)). \`уникати \\зворотного вибору, уникати зворотної косої риси, а інших послідовностей втечі немає. Якщо вам потрібен новий рядок, просто вставте фактичний буквальний новий рядок у рядку.
  • Використання Ruby's Rationalдля довільної точності з плаваючою точкою, один з головних недоліків GolfScript.
  • Можливість перетворення типів в інші типи. Наприклад, ви можете перетворити блок в рядок.
  • Регулярні вирази. Ймовірно, створений с "...". Оператори також будуть перевантажені для них. Наприклад, "\W"~{`Invalid: non-word character`}{`OK`}if. Автоматично виконується при натисканні зі змінної, як блоки.
  • Файли та об’єкти дати, щоб зробити більше речей, які були неможливі в GolfScript. Вони не матимуть літералів, але матимуть функції для їх ініціалізації, наприклад `file.txt`fl(ім'я функції створення файлів може змінюватися).
  • Можливо, хеши, але в цьому я не впевнений. Чи я повинен?
  • Функції помічників робити ще більше. Наприклад, `http://example.com`netдля доступу до мережі (знову ж, netоператор може бути перейменований). rbвиконати рядок як код Ruby. Їх буде набагато більше; пропозиції вітаються.
  • Ніяких коментарів, щоб їх #можна було використовувати для чогось іншого. Якщо ви хочете коментаря, `comment here`;буде добре працювати. (Можливо, #може замінити `функцію)
  • Це буде повністю переписано таким чином, що додавати функції буде набагато простіше. В основному, код буде більш читабельним. (Ви бачили джерело GolfScript? :/)
  • Це буде на Github, щоб над ним можна було спільно працювати. Я ліцензую його під MIT чи щось.
  • Немає остаточного нового рядка, тому хитрі лайки працюють: P

І я встановлюю їх окремо, тому що думаю, що вони є найбільш різкими і корисними змінами (крім, можливо, додавання плаваючої точки):

  • У ньому буде вбудовано багато функцій Ruby. Наприклад, shuffle(що може бути скорочено sf) (раніше брало 9 символів ), tr(раніше 14 символів ), sample( sm, раніше .,rand=), flatten( fl, раніше ???) тощо.
  • Це буде м'ясисте, як у Ребму. Наприклад, тепер ви можете зробити ~:a0<{0a-}aIF(використовуючи назву змінної букви) замість ~:$0<{0$-}$if(перезаписати функцію сортування). (приклад звідси ). Зауважте, що цей спосіб є нечутливим до регістру, і цифри у назвах змінних заборонені. На мою думку, це нормально, оскільки мова про гольф: P
  • У ньому буде налагодження. Я додам можливість подати прапор із зазначенням роздільників масивів, роздільників елементів тощо, виведення чисел (раціональний, плаваючий чи int?), Переглядаючи інструкції по черзі, токенізуючи та виводячи кожен маркер замість запуску програми, тощо.

Отже, моє запитання: що тут вдосконалити? Як ви думаєте, що я повинен додати?

Будь-які інші ідеї для цього, перш ніж почати його кодувати?


Зрозумійте, що якщо ви додасте роздуття, ви втрачаєте чутливість до справи.
marinus

@marinus Я це розумію. Я мав би це зрозуміти; редагування ...
Doorknob

Крім того, що йому дійсно потрібно, це спосіб робити явні введення-виведення (для інтерактивних програм). Інтерпретатор міг заздалегідь перевірити, чи програма використовує явний введення / вивід, і робити неявний введення / вивід лише якщо він цього не робить.
marinus

@marinus Чудово, ви можете додати це як відповідь :)
Doorknob

1
@Claudiu Моя розробка моєї нової мови є досить живою, хоча останнім часом я досить зайнятий, тому мало часу з цим мало займався. Деякі з цих ідей - це не дуже хороші ідеї, якими я не користуюся: P
Дверна ручка

Відповіді:


17

Гнучка введення-виведення

В даний час Golfscript не можна використовувати для інтерактивних програм. Я пропоную додати деякі функції для явного введення даних (тобто readline, getcharдрузів). Інтерпретатор повинен побачити, чи використовує програма їх перед запуском.

Якщо програма не викликає жодної функції введення, інтерпретатор повинен діяти так, як це робить Golfscript.

Я б не очікував, що інтерпретатор виявить функції введення в коді eval'ed, сформованому під час виконання, але якщо це якимось чином це може зробити, kudos.


Це чудова ідея; обмежене io - одне з великих обмежень golfscript. +1
Дверна ручка

11

Коротші вбудовані модулі

Псевдоніми з одним символом для всіх вбудованих команд, у яких їх немає. Я б використав baseнабагато більше, якби це було просто B.


Але що робити, якщо ви використовуєте bяк ім'я змінної? Все-таки; гарна ідея; ви просто пам’ятаєте, що не використовуєте це ім'я, якщо ви збираєтесь використовувати цю функцію, а якщо ви не використовуєте функцію, то це зовсім не вплине на вас.
Дверна ручка

@DoorknobofSnow, ви вже можете використовувати вбудовані (і навіть лексеми, такі як ^або $) як імена змінних. Це не погіршує цю проблему. Крім того, я запропонував псевдоніми, щоб дозволити зворотну сумісність, тому вам просто доведеться використовувати довше ім’я, якщо ви призначили щось інше для коротшого псевдоніма.
Пітер Тейлор

4
Zбо zipтакож було б дуже корисно.
Говард

Можливо, ми можемо випустити офіційну стандартну бібліотеку для GolfScript. Але мені незрозуміло, як це можна включати в рішення (відсутнє #includeі "#{IO.read'lib'}"~занадто довге).
Говард

@Howard Тепер це ідея ... Я можу додати бібліотеки мовою мовою, можливо, як mylang -Llibname somefile.ext.
Дверна ручка

9

Комбінований дів-мод

Це трохи більше ніші, ніж деякі пропозиції, але, працюючи над теоретичними програмами про число, я часто відчуваю, що хочу операцію, яка вискакує два цілих числа aі bзі стека, і штовхає a/bі a%b. (В даний час це 1$1$/@@%).


Оскільки це така ніша, можливо, щось на зразок dvmDiV-Mod. Дякую за всі ідеї :-) +1
Doorknob

8

Числа

Змініть лексеру таким чином, щоб ведучий 0 не був частиною числа:

# current behaviour
01     # -> 1

# new
01     # -> 0 1

Також _замість них слід записати від’ємні числа :

# current behaviour
1 2-3   # -> -1 3

# new
1 2_3     # -> 1 2 -3

Вау, це цікаво. Зазвичай ви не натискаєте два числа поспіль, але це дуже допоможе. Негативна річ теж чудова, замість 0 100-негативної 100. +1
Дверна ручка

1
Я про це думав раніше. Підтримка негативних цілочислових літералів взагалі не має бути. Це вже обробляється ~. Наприклад -1 0~. Це робить невелику кількість чисел довше на одну таблицю, але позбавляє від помірно частої потреби у пробілі після -.
Пітер Тейлор

Зачекайте хвилинку, як би ви штовхнули, наприклад, 1001? Я думаю, ти мав на увазі просування нуля, а не відставання.
Дверна ручка

@DoorknobofSnow Right.
Говард

Що б ви думали про те, як робити {0\-}:~;( ~негатив-іє число) і використовувати notдля побітових (точно так само and or xor)?
Дверна ручка

8

Доступ до всієї стеки

GolfScript - мова, що базується на стеці, але доступ до всіх, окрім трьох найкращих елементів у стеку, обмежений <integer>$для копіювання n-го елемента. Було б корисно мати щось на зразок rollкоманди PostScript, щоб було легше працювати з більш ніж трьома "живими" змінними.

В ідеалі були б версії з одною аргументацією та дво аргументи, але якщо навколо недостатньо імен, то один-аргумент повинен отримати перевагу для одного символу.

Один аргумент просто бере кількість елементів для прокатки. Наприклад 1 roll, нічого не робить; 2 rollеквівалентно \; 3 rollеквівалентно @; 4 rollа для більших чисел не існує існуючого еквівалента; найближче, що можливо, щось подібне

]-4/()\+\+[]*-1%~

(і це навіть не обробляє нецілі числа в певних позиціях стека, або активне [, і майже напевно також розбивається всередині циклів).

Дві аргументи також беруть суму, щоб скотити; a b roll2еквівалентно {a roll}b*.


Так, як у Рубі rotate. Ви повинні відредагувати це у відповідь CW.
Дверна ручка

@Doorknob, ні. Я говорю про роботу на фрагменті стека, а не на масиві.
Пітер Тейлор

Гм ... я не впевнений, що ти маєш на увазі. Я не знайомий із постскриптом, але rollпросто обертає масив, правда?
Дверна ручка

@DoorknobofSnow, стек . Масив - це елемент, який надходить у стек.
Пітер Тейлор

О, так він обертає всю стопку . Ах, це може бути корисно! +1
Дверна ручка

8

CJam

Я реалізував "вдосконалений GolfScript", і він називається CJam - http://sf.net/p/cjam
Зараз у другому випуску (версія 0.6) він вже має багато, якщо не більшість функцій, про які йде мова тут. Я спробую перерахувати їх:

  • все ще написано на Рубі - nope, java
  • використання `в якості роздільника рядків - ні, але він використовує рядки з подвійним цитуванням із мінімальним пробігом ( \лише для втечі \та ")
  • плаваюча точка - підтримується, але тільки стандартна "подвійна", а не довільна точність
  • конвертувати типи в інші типи - так
  • регулярні вирази - ще не, але заплановані; використовуватиме звичайні рядки зі спеціальними операторами
  • Об'єкти файлів і дат - ні, але можуть отримати поточну дату / час
  • хеши - якщо припустити, що вони схожі на диктовки пітона або java-карти, то вони не підтримуються (можливо, це врахує в майбутньому)
  • допоміжні функції зробити ще більше - так, багато
  • `http://example.com`net - "example.com"g
  • виконати рядок як код Ruby - nope
  • жодних коментарів - точно, #використовується для чогось іншого,"comments like this";
  • простіше додавати функції - я так думаю, але я також упереджений :)
  • на Github - ще краще (на мою думку, не стріляйте) - на SourceForge, використовуючи hg
  • ліцензовано в рамках MIT - так
  • немає остаточного нового рядка - правильно
  • перемішати - mr
  • tr - er
  • зразок - не зроблено, _,mr=
  • згладити - не зроблено, але, мабуть, простіше досягти
  • mushed - ні, але ідентифікатори не потрібно розділяти
  • налагодження - лише сліди стека та edоператор для показу стека

  • гнучкий введення / виведення - так, але лише явний ввід

  • коротші вбудовані - так, b= база, z= блискавка
  • окремий ведучий 0 - ні, але може використовувати попередньо визначені змінні
  • розлучати -- так, але не з _; 1 2-3-> 1 2 -3; 1 2m3->-1 3
  • котити / обертати стек - ніп
  • набір масиву - t
  • divmod - md
  • змінити лексеру (для ідентифікаторів) - так, докладніше нижче
  • декартовий продукт - не зовсім те саме, але так, m*
  • оператори unicode - ні
  • односимвольні ідентифікатори - заздалегідь задані оператори мають 1 або 2 символи, а змінні є односимвольними великими літерами; всі вони можуть бути об'єднані, не плутаючи лексеру / аналізатора
  • операторів на блоки - немає
  • стабільний сорт - так
  • перетворити символи в кодові блоки - ні, але вони можуть бути додані пізніше
  • поточна дата / час - et
  • аргументи командного рядка - ea
  • чітке розділення вбудованих програм - так, але великі літери є змінними; вбудовані букви або починаються з малих та спеціальних символів
  • хв і макс - так, в даний час тільки на 2 значення: e<,e>
  • абсолютне значення - z(GolfScript має abs, не вистачає)
  • сума і добуток масиву - :+,:*
  • Відстань на Манхеттені - немає
  • chr - c(перетворюється на символ, а не на рядок)
  • пролийте рядок на стек - рядки CJam складаються з символів, а не цифр; щоб розлити персонажів це все-таки{}/
  • версія, :що споживає те, що зберігається - nope
  • оператори для >=, <=- немає, використання <!,>!
  • base64 і zlib - nope
  • ярлики за 1 $, 2 $, 3 $, 4 $, 5 $ - nope
  • скопіюйте два найкращі елементи стека - заплановано; для використання зараз1$1$
  • локальні змінні - nope
  • HQ9 + функції - ні, дякую

CJam має набагато більше функцій, ознайомтеся з https://sourceforge.net/p/cjam/wiki/Operators/


7
Я не погоджуюся з тим, що SourceForge та Mercurial кращі за GitHub.
nyuszika7h

1
@ nyuszika7h це нормально, у всіх нас є свої вподобання
aditsu кинь, тому що SE - EVIL

Я щойно опублікував свою першу відповідь CJam , тому що моя відповідь GolfScript відчайдушно потребувала належної функції sqrt. CJam набагато швидше, ніж GolfScript!
Денніс

@Dennis Awesome :)
aditsu кинув, бо SE

@aditsu Чи вважаєте ви CJam діалектом GolfScript чи новою мовою, навіяною GolfScript? (Ось чому я запитую: codegolf.stackexchange.com/questions/37464/… )
Мартін Ендер

6

Змініть лексеру

Лексер GolfScript розглядає ідентифікатор Ruby (все, що відповідає регулярному вираженню [_a-zA-Z][_a-zA-Z0-9]*) як єдиний маркер. Якщо це замість цього, трактується [a-zA-Z]+як маркер, який вивільняється _як вбудований, і дозволить альфа-змінній супроводжуватися буквальним цілим числом, не розділяючи пробіл.


Ну, на даний момент я використовую просто [a-z]+|[A-Z]+, для роздуття, тому підкреслення безкоштовно. Це цікава і дуже унікальна ідея, хоча! +1
Дверна ручка

5

Псевдоніми Unicode

Команди з декількома символами можуть мати псевдоніми unicode. Це дозволить заощадити рахунок, коли оцінка зараховується в символах, а не в байтах.


7
гм ... ми не хочемо чергового APL ...
Джон Дворак

1
Golfscript - це не що інше, як APL, Unicode чи ні. У нас уже є кілька інших APL-файлів, таких як J та K. (або навіть R, який мені здається натхненним APL, до того, що ви можете робити буквальні переклади досить часто)
marinus

Відмітним моментом щодо APL є те, що він використовує зовсім іншу діаграму, ніж будь-що інше, а не те, що він спочатку використовує векторну арифметику. Мені подобається J, я його використовую, і я зазвичай підтримую відповіді на J. Я ще не схвалив одну відповідь APL. Якби я хотів малювати свої програми, а не писати їх, я би використовував Piet.
Джон Дворак

Я думаю, що APL є більш розбірливим, ніж J, безумовно, більш розбірливим, ніж Golfscript.
marinus

5

Стабільний сорт

$Вбудований на блоки повинні виконати стабільну сортування.


5

Оператор набору масивів

["A" "B" "C" "D" "E" "F"] -1 4 S    # -> ["A" "B" "C" "D" -1 "F"]

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


+1 Я почав писати повідомлення в блозі про реалізацію набору масивів, але так і не закінчив його. Наразі надзвичайно важко в повній загальності. Це мало б велике значення для деяких викликів.
Пітер Тейлор

Я не можу повірити, що це вже не вбудовано в гольфскрипт. +1
Дверна ручка

5

Однозначні ідентифікатори

Це не так, як рішення в кодовому гольфі має занадто багато змінних. І це би заощадило на просторах.


Хм .. Це також можна зробити, змінивши аналізатор. Можливо, прапор, щоб вказати таку поведінку? Чудова ідея! +1
Дверна ручка

4

% від вбудованого продукту

[1 2][1 2 3]%  # -> [[[1 1][1 2][1 3]][[2 1][2 2][2 3]]]

+1; ви можете відредагувати мою відповідь CW і додати цю
Doorknob

А як з модулем?
MilkyWay90

3

Підтримка Regex

Відсутність підтримки регулярних виразів завжди вражає мене дивною мовою, призначеною для гольфу. Було б чудово мати

  • <string> <string> <string> y(він же trвикористовує для нього однополюсний псевдонім Perl)
  • <string> <string> <string> s (замінник)
  • <string> <string> <block> s (замінити зворотним дзвінком)
  • <string> <string> m (матч)

Я вже згадував регекс у своєму питанні.
Дверна ручка

3

Вбудовані для поточної дати / часу

Наразі дуже складно отримати дату / час, використовуючи Ruby evals.

D     # -> [2013 12 31]
T     # -> [23 59 59]

Це дає дату / час у Лімі чи Зулу?
Пітер Тейлор

@PeterTaylor Не знаю - час змінюється ;-)
Говард

@howard Ви мали на увазі "Часи, вони змінюються" ?
Джон Дворак

Вже згадується як тип часу в ОП.
Дверна ручка

3

Зробити вбудовані |, & та ^ робити щось корисне на блоках

Наприклад, <array/string> <block> |можна використовувати як функцію індексу

[0 -10 -20 30 40 -50 60] {0<} |   # -> [1 2 5]

Будь-які ідеї для <array/string> <block> &або <array/string> <block> ^?


Що зараз array block =робить?
Джон Дворак

@JanDvorak Порівняйте. Корисно, якщо ви хочете порівняти рядок з блоком, наприклад "0<" {0<} =.
Говард

Як часто вам це потрібно? Я вважаю за краще це відкинути і використовувати array block =для "виділити за присудком"
Джон Дворак

@JanDvorak вибір за присудком вже реалізований за допомогою ,.
Говард

о, неважливо. Продовжуйте :-)
Джон Дворак

2

Спосіб повернення символів у кодові блоки

В даний час ми можемо прив’язати кодові блоки до символів :, але немає можливості повернути процес: виконання символу, прив'язаного до кодового блоку, просто виконує блок.

Я бачу кілька способів цього здійснити:

  1. додайте новий синтаксис, наприклад, #fooдля переміщення значення fooдо стеку, навіть якщо це блок коду, або

  2. додайте оператора для розширення кожного символу в кодовому блоці, так що (використовуючи _як новий оператор), наприклад, {2*}:dbl; {dbl dbl}_буде вироблятися {2* 2*}.

Я бачу переваги обох методів. Останній міг би замінити перший, ціною двох додаткових символів ( {foo}_замість #foo), але я бачу деякі потенційні програми для колишнього синтаксису, коли ці два символи були б непомітними (наприклад, array #func %замість використання array {func} %).

Тим часом колишній синтаксис міг би бути використаний для заміни останнього, якби був зручний спосіб якось ітерації над лексемами в кодовому блоці (який у будь-якому випадку може бути корисним самостійно).


У будь-якому випадку я б запропонував, щоб розширювальні символи, які прив'язані до вбудованих вбудованих модулів (тобто реалізовані в коді Ruby), повинні повернути якусь заглушку, яку можна було б викликати для отримання функціональності вбудованого, при цьому бути або неможливим або просто навряд чи буде відмінено Наприклад #$(або {$}_) може повернутися, наприклад {builtin_dollar}, де builtin_dollarміститиметься реальна реалізація $вбудованого (і / #builtin_dollarабо {builtin_dollar}_повинна просто повертатися {builtin_dollar}).

Це дозволило б переробляти вбудовані модулі, не втрачаючи доступу до їх функціональності (див. Мою попередню пропозицію ), так що якщо я, скажімо, чомусь захотів змінити значення $і @, я міг би просто зробити #$ #@ :$; :@;(або {$}_ {@}_ :$; :@;).


Я не впевнений у тому, що _оператор повинен робити, якщо блок коду містить призначення змінних. Очевидною річчю було б просто залишити будь-які :symbolмаркери недоторканими та розширити що-небудь інше, але це призведе _до порушення будь-якого коду за допомогою локальних змінних. Зробити так, щоб не порушити такий код, можливо, непрактично складно.
Ільмарі Каронен

1
Ваша друга версія буде відповідати разом з Звести оператор на масивах: [[1] [2] [3]] _ -> [1 2 3].
Говард

То який би був результат 2:A;{1:A;A}_?
Говард

Наївно, {1:A;2}(або, якщо бути технічним, {1:A builtin_semicolon 2}якщо вбудована функція розширення була включена). Якщо якась функція "виключення локальної змінної" була включена, вона, правдоподібно, може оцінюватися просто {1:A;A}.
Ільмарі Каронен

Або бути ще більш технічним {builtin_1 :A builtin_semicolon 2}.
Говард

1

Змінна передустановка з аргументами командного рядка

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


_доступний. Можливо, це? У будь-якому випадку, так, golfscript потребує способу прийняття cmd line args +1
Doorknob

0

Native Ruby функції, які я повинен реалізовувати

Це спільнота Wiki; не соромтесь редагувати та додавати функції, які, на вашу думку, я повинен реалізувати!

Формат: " nativeFunctionName( nameInMyLanguage)"

  • shuffle( sf)
  • tr( tr)
  • sample( sm)

0

Візьміть також функції APL та HQ9 +!

  • Ярлики, як в APL. EDIT: тільки що побачив відповідь "псевдоніми unicode". Це я мав на увазі :)
  • Інші ярлики, орієнтовані на гольф, як у H9 +, HQ9 +, CHIQRSX9 +

Гаразд, то як би ви запропонували це? Якісь конкретні ідеї?
Дверна ручка

символи unicode, що дозволяють робити складні речі лише одним символом.
xem

@Doorknob of Snow, я оновив свою відповідь ярликами, які я хотів би побачити: тими з APL та тими з CHIRQSX9 + :)
xem

Хм, річ hq9 + здається занадто хитрою :-P
Дверна ручка

Це орієнтоване на гольф: На мою думку, ваша мова повинна робити як мінімум так само :)
xem

0

Чітке розділення вбудованих модулів

наприклад столиці: вбудовані; що робить B для основи можливим


1
Як було сказано вище, розділяти не потрібно. Якщо хтось любить перезаписати вбудований, він повинен це зробити. Я навіть знайшов корисні програми типу операторів, що перезаписують {-}:+.
Говард

Не потрібно, також ця мова буде нечутливою до регістру.
Дверна ручка

2
Оскільки мета полягає в тому, щоб забезпечити менше ударів на отвір, наявність чутливості до справ і більше вбудованих даних ефективно призводить до виступу місії.

0

Локальні змінні / закриття

Одне, що мені дуже не вистачає в GolfScript - це можливість тимчасово змінювати значення символу .

Зокрема, наразі немає можливості тимчасово змінити значення вбудованого "примітиву": як тільки ви, скажімо, переосмислите $, ви ніколи більше не збираєтесь щось сортувати в цій програмі. (Ну, не без написання власної реалізації сортування, принаймні.) Було б дуже приємно сказати, що, наприклад, у цьому кодовому блоці $ означає щось інше, але все-таки зберігати нормальне значення в іншому місці.

Зв'язане з вищезазначеним, було б непогано прив'язати символи в кодовому блоці до їх поточного значення . Звичайно, я можу записати, сказати, {$-1%}:rsortі зможу використовувати rsortдля сортування та повернення масиву, але це працює лише до тих пір, поки визначення $( -1або %) не зміниться, оскільки моя rsortфункція все ще викликає глобальний символ $. Було б добре сказати "нехай rsortробити те, що $-1%зараз робить, навіть якщо ці символи згодом будуть перероблені".

Зокрема, стандартна бібліотека могла використовувати такий вид прив'язки. Як не дивно зрозуміти, що, скажімо, зміна nзмінює поведінку putsабо переосмислення !повністю заплутається xor. (Знову ж таки, тут слід проявляти деяку обережність, оскільки, зокрема, можливість змінити поведінку putsвиявляється єдиним способом уникнути друку остаточного рядка в поточній версії GS.)

Редагувати: Можливість повернення символів у кодові блоки дозволить пройти довгий шлях до реалізації цієї функціональності. Зокрема, {foo}_синтаксис, запропонований у цій відповіді, ефективно виконував би один рівень статичного зв’язування шляхом розширення всіх символів у кодовому блоці. Поєднайте це з комбінатором точок фіксації для глибокого статичного прив'язування, а Боб - ваш дядько ...


Давай - усі модні нові мови відзначають ліниві оцінки ;-) Давайте збережемо цю функцію в GolfScript.
Говард

По-друге, думка - ти маєш рацію, це скоріше властивість обов'язкового, ніж оцінювання. Але тоді - статичне прив'язування складніше, ніж звучить - наприклад, надайте рекурсивні дзвінки всередині визначення.
Говард

"Нехай rsortробити те, що $-1%зараз робить, навіть якщо ці символи згодом переробляються" Отже, Емменталь?
CalculatorFeline

0

Більше вбудованих функцій

Змусьте всі однобуквені змінні az і AZ виконувати якусь загальну корисну функцію. Деякі вбудовані файли, яких бракує:

  • min та max: всі або деякі з перших 2-х значень стека, верхні n значень стека, через масив
  • абсолютне значення
  • сума та добуток масиву. навіщо робити, {+}*коли можна робити S? У вас тут 52 функції для роботи!
  • Відстань на Манхеттені (тобто x1 y1 x2 y2 --> abs(x2-x1)+abs(y2-y1). Це повинно бути, @-A@@-A+якщо Aце вбудована абсолютна величина. Зазначилося, що це лише припущення про моє останнє повідомлення, але я завжди вважав, що це буде хорошим способом розширити гольфскрипт: записати що Функції було б зручно мати, збирати та додавати як вбудовані.
  • Перетворіть ціле число в односимвольний рядок (еквівалент python's chr).
  • Пролийте рядок на стек (наразі {}/)
  • Версія, :яка споживає те, що зберігається. Це не повинно «застрягати» за ідентифікаторами, щоб бути корисними.
  • Оператори для >=,<=
  • Як хтось запропонував, спосіб поставити змінну, що містить блок, на стек, не виконуючи її. Таким чином, ви можете звести ifs форми 1{\}{|}ifдо чогось подібного1?\?|if
  • Вбудована конверсія base64 та підтримка zlib, щоб вбудовувані дані брали менше символів
  • Крім base64, зробіть власну кодування base93 (використовуючи всі друковані символи, які не є роздільником рядків).
  • Ярлики для 1$, 2$, 3$, 4$,5$
  • Оператор для копіювання двох перших елементів стека таким, яким вони є, тобто \.@.@\

-3

Було б добре, якби значення, записане або обчислене в останньому рядку функції, автоматично було повернуто


3
Це на основі стека, так що ...
marinus

1
Немає такого поняття як функція.
Пітер Тейлор

Функції нічого не повертають ... і називаються блоками
Doorknob

Це може бути приємно ... якоюсь іншою мовою. (Більше немає дратівливих тверджень про повернення в кінці функцій! Так! (Але мені ніколи не потрібні заяви про повернення, тому ...))
CalculatorFeline
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.