Как можно улучшить Pyth? [закрыто]


24

Pyth находится в стадии разработки, а это означает, что новые функции добавляются все время.

Я хочу сделать Pyth лучшим языком, поэтому я хотел бы знать, какие функции ищут люди.

Это то место, где вы пишете идеи для того, чтобы сделать Pyth лучше.

В своем ответе, пожалуйста, укажите:

  • То, что вы хотели бы видеть, изменилось / добавилось.

  • Пример использования изменения.

Я прокомментирую, если я планирую реализовать предложение.

Пожалуйста, проверьте, если идея, которую вы хотите предложить, уже была предложена. Upvote идеи, которые вы хотели бы реализовать.


Реализованные предложения:


Это было по теме в соответствии с этим мета-вопросом, когда я отправил вопрос, это больше не ясно.


1
Почему это вики сообщества?
Geobits

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

9
Я не уверен, что я чувствую к таким вопросам. Я вижу, что здесь это имеет смысл, потому что PPCG, вероятно, охватывает большую часть (если не все) пользовательской базы Pyth, но я не уверен, что мы должны использовать его в качестве средства отслеживания проблем. Я добавил ответ в мета-пост.
Мартин Эндер

Разве это не было мета? Серьезно, ребята
Алек Тил

2
@AlecTeal «Пазлы метапрограммирования и Code Golf Stack Exchange - это часть сайта, где пользователи обсуждают работу и политику Code Golf Stack Exchange, а не обсуждают головоломки программирования или сам Code Golf». Мета специально об этом сообществе . Это действительно не относится к мета. Принадлежит ли это здесь или нет на PPCG вообще, в настоящее время обсуждается в мета-посте, на который я ссылаюсь.
Мартин Эндер

Ответы:


7

Вложенные циклы

Если вы хотите вложить forциклы, вам нужно потратить впустую байт для использования F<var><seq>внутри a V<seq>или наоборот. Я хотел бы иметь то же самое, что и с лямбдами, где переменная, используемая для цикла, изменилась бы при вложении циклов.


Это может быть даже распространено на другие вещи, например L, которые могут переопределить, скажем, Cво второй раз, когда он был вызван.
FryAmTheEggman


4

Упрощенный импорт модулей

До сих пор каждый раз, когда я использовал $это было что-то вроде:

$from <module> import <function> as <pyth-function-with-same-arity>$
for example:
$from unicodedata import name as neg$

Может быть новая функция, которая суммирует это, например .$:

.$"unicodedata""name""neg"
.$"unicodedata name neg"

Или используя более новый синтаксис, подобный тому, _Mкоторый может быть нелегко / невозможно сделать:

_$unicodedata name$

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


4

Спать

Это вызвало проблемы здесь , и @ mbomb007 предложил поставить его в качестве улучшения в Pyth . По сути, сейчас, чтобы поспать определенное количество секунд, мне нужно сделать что-то вроде:

Q$__import__('time').sleep(Q)$

Что раздражает и долго, черт возьми.


Вы можете смоделировать спящее поведение с помощью функции date. f>.d1Q0например спит Qсекунды.
Якуб

@Jakube Это не всегда работает. Согласно документам, в Unix он возвращает время, в течение которого программа работала. Что плохо, когда пользователь вводит данные.
kirbyfan64sos

Как насчет этого , чем: J.d0f>-.d0JQ0. Хотя это довольно долго ... Я согласен, функция сна была бы хороша.
Якуб

4

Больше лямбд

Это действительно идея FryAmTheEggman , но я публикую ее, чтобы получить ее там.

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

Было бы неплохо иметь L, Mи друзья каждый раз переопределяют разные функции; например, этот код:

L*b2L*b3y5'5

может скомпилировать в:

@memoized
def subsets(b):
 return times(b,2)
@memoized
def read_file(b):
 return times(b,3)
imp_print(subsets(5))
imp_print(read_file(5))

Конечно, точный выбор функций может быть изменен.


3

Улучшенные многомерные массивы

Использование многомерных массивов в настоящее время сделать довольно сложно. Например, код C A[B][C][D]будет переводиться @@@ABCDв Pyth. Нечто подобное @A[BCD)будет намного приятнее (хотя и не короче). То же самое относится и к X; A[B][C][D] = Eв настоящее время X@@ABCDE, когда это может быть XA[BCD)E.


3

Некоторые второстепенные идеи

  • Абсолютная разница, то есть abs(val1 - val2). В настоящее время это .a-<val1><val2>.
  • min/ maxдля значений. В настоящее время это hS,<val1><val2>/ eS,<val1><val2>или то же самое с большим количеством значений. ( hS<seq>/ eS<seq>для последовательностей достаточно коротка.)

3

Не особенность Pyth, но тем не менее ...

Модульный код Pyth

Это влияет только на Pyth под капотом. Некоторые части реализации Pyth довольно грязные. Множество глобальных переменных и других хакерских вещей.

Я действительно расстроился несколько дней назад, когда попытался использовать несколько функций реализации Pyth (например, выполнение строки команд Pyth) из другого скрипта Python.

Было бы неплохо что-то вроде следующего:

from pyth import execute_pyth
print(execute_pyth(code='sQ', input='[1, 2, 3]'))

Ну, я думаю, это всего лишь вызов помощи для Pyth5.



1

Уникальные элементы

У Pyth в настоящее время нет коротких путей получения уникальных элементов последовательности. Вы можете проверить, является ли он уникальным, но вы не можете получить предметы, которые на самом деле уникальны. В настоящее время самый короткий путь это :

{.-Q{Q

6 байт! Сравните это с K, где получение уникальных элементов является операцией один байт: =x.

Может быть, .}будет работать здесь?


О каких случаях использования (кроме одной задачи) ты думаешь?
Исаак

@isaacg Не могу вспомнить, но раньше мне приходилось пытаться получить уникальные элементы списка, и мне пришлось использовать что-то еще (что всегда было длиннее).
kirbyfan64sos

Я не программист Pyth, но я сталкиваюсь с этим все время в GolfScript / CJam: .&соотв. _&появляется во многих ответах. Это очень полезно.
Линн

1
Чем это отличается от {Q?
Исаак

1
@isaacg Это отсортировано
Ypnypn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.