Jak można poprawić Pyth? [Zamknięte]

24

Pyth jest w ciągłym rozwoju, co oznacza, że ​​cały czas są dodawane nowe funkcje.

Chcę sprawić, by Pyth był lepszym językiem, dlatego chciałbym wiedzieć, jakich funkcji szukają ludzie.

To miejsce, w którym masz pomysły na ulepszenie Pytha.

W swojej odpowiedzi proszę podać:

  • To, co chcesz zobaczyć zmienione / dodane.

  • Przykładowe zastosowanie zmiany.

Skomentuję, jeśli planuję wdrożyć sugestię.

Sprawdź, czy pomysł, który chcesz zasugerować, został już zasugerowany. Oceń pomysły, które chcesz wdrożyć.


Wdrożone sugestie:


To było na ten temat, jak na to meta pytanie, kiedy zamieściłem pytanie, nie jest już jasne.

isaacg
źródło
1
Dlaczego jest to wiki społeczności?
Geobits,
4
To bardziej dyskusja i zbiór sugestii. Nikt nie powinien zyskać ani stracić przedstawiciela za sugerowanie funkcji Pyth. Ponadto zaimplementowane sugestie powinny prawdopodobnie zostać usunięte. To powiązane pytanie jest także wiki społeczności.
Dennis,
9
Nie jestem pewien, co sądzę o takich pytaniach. Widzę, że ma to sens, ponieważ PPCG prawdopodobnie obejmuje większość (jeśli nie wszystkie) bazy użytkowników Pytha, ale nie jestem pewien, czy powinniśmy używać go jako narzędzia do śledzenia problemów. Dodałem odpowiedź do meta postu.
Martin Ender,
Czy nie powinno to być meta? Poważnie chłopaki
Alec Teal
2
@AlecTeal „Meta Programming Puzzles & Code Golf Stack Exchange to część witryny, w której użytkownicy omawiają zasady działania i zasady Code Golf Stack Exchange zamiast omawiać zagadki programistyczne lub sam kod golfowy”. Meta dotyczy konkretnie tej społeczności . To naprawdę nie należy do meta. To, czy należy do PPCG, czy nie, jest obecnie omawiane w meta postie, który podlinkowałem.
Martin Ender,

Odpowiedzi:

7

Pętle zagnieżdżone

Jeśli chcesz zagnieżdżać forpętle, musisz obecnie zmarnować bajt na użycie F<var><seq>wewnątrz a V<seq>lub vice versa. Chciałbym mieć to samo, co z lambdas, gdzie zmienna używana dla pętli zmieniałaby się podczas zagnieżdżania pętli.

PurkkaKoodari
źródło
Może to być nawet rozszerzalne na inne rzeczy, takie jak L, które mogłyby przedefiniować, powiedzmy, Cza drugim razem, kiedy zostały wywołane.
FryAmTheEggman
4

Łatwiejszy import modułu

Do tej pory za każdym razem, gdy korzystałem $, było coś takiego:

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

Może być nowa funkcja, która podsumowuje to na przykład .$:

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

Lub używając nowszej składni, _Mktóra może nie być łatwa / możliwa do wykonania:

_$unicodedata name$

Ponadto jedna funkcja z każdym arsem może otrzymać jednuliterową nazwę makra, aby wywołania te mogły być krótsze (z wyjątkiem _$opcji).

FryAmTheEggman
źródło
4

Spanie

Spowodowało to kłopoty tutaj , a @ mbomb007 zasugerował, aby umieścić to jako ulepszenie Pyth . Zasadniczo teraz, aby spać przez określoną liczbę sekund, muszę zrobić coś takiego:

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

Co jest denerwujące i długie jak cholera.

refi64
źródło
Możesz symulować zachowanie podczas snu za pomocą funkcji daty. f>.d1Q0na przykład śpi Qsekundy.
Jakube,
@Jakube To nie zawsze działa. Zgodnie z dokumentacją, w Uniksie zwraca czas, przez jaki program działał. Co jest złe, gdy użytkownik wprowadza dane wejściowe.
kirbyfan64sos
Jak o tym jednym niż: J.d0f>-.d0JQ0. To jednak dość długo ... Zgadzam się, funkcja snu byłaby miła.
Jakube,
4

Więcej lambdów

To jest naprawdę pomysł FryAmTheEggman , ale publikuję go, aby go udostępnić .

Czasami stwierdzam, że użycie dwóch różnych jednoargumentowych lambd skróciłoby kod, podczas gdy konieczność użycia dwuargumentowego lambda dla jednego nie.

Byłoby miło mieć L, Ma za każdym razem znajomi redefiniują inną funkcję; na przykład ten kod:

L*b2L*b3y5'5

można skompilować do:

@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))

Oczywiście dokładny wybór funkcji można zmienić.

rev Pietu1998
źródło
3

Ulepszone tablice wielowymiarowe

Obecnie używanie tablic wielowymiarowych jest raczej trudne. Na przykład kod C A[B][C][D]tłumaczy się @@@ABCDw Pyth. Coś podobnego @A[BCD)byłoby znacznie ładniejsze (choć nie krótsze tutaj). To samo dotyczy X; A[B][C][D] = Ejest obecnie X@@ABCDE, kiedy może być XA[BCD)E.

rev Pietu1998
źródło
3

Kilka drobnych pomysłów

  • Różnica bezwzględna, tj abs(val1 - val2). Obecnie jest .a-<val1><val2>.
  • min/ maxdla wartości. Obecnie jest to hS,<val1><val2>/ eS,<val1><val2>lub to samo z większą liczbą wartości. ( hS<seq>/ eS<seq>dla sekwencji jest wystarczająco krótki.)
PurkkaKoodari
źródło
3

Nie jest to funkcja Pyth, ale mimo to ...

Zmodularyzuj kod Pyth

Wpływa to tylko na Pyth pod maską. Niektóre części implementacji Pyth są dość nieuporządkowane. Wiele zmiennych globalnych i innych złośliwych rzeczy.

Byłem naprawdę sfrustrowany kilka dni temu, kiedy próbowałem użyć kilku funkcji implementacji Pyth (takich jak wykonywanie ciągu poleceń Pyth) z innego skryptu Python.

Przydałoby się coś takiego:

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

Cóż, myślę, że to tylko pomoc dla Pyth5.

Jakube
źródło
1

Unikalne elementy

Pyth obecnie nie ma krótkiego sposobu na uzyskanie unikalnych elementów sekwencji. Możesz sprawdzić, czy jest unikalny, ale nie możesz zdobyć przedmiotów, które są naprawdę unikalne. Obecnie najkrótsza droga to :

{.-Q{Q

6 bajtów! Porównaj to do K, gdzie uzyskanie unikalnych elementów jest obsługa jedną bajt: =x.

Może .}by tu pracował?

refi64
źródło
O jakich przypadkach użycia (innych niż tat one Challenge) myślisz?
isaacg
@isaacg Nie do końca pamiętam, ale musiałem wcześniej spróbować zdobyć unikalne elementy listy i musiałem użyć czegoś innego (co zawsze było dłuższe).
kirbyfan64sos
Nie jestem programistą Pyth, ale ciągle napotykam na to w GolfScript / CJam: .&resp. _&pojawia się w wielu odpowiedziach. To jest bardzo użyteczne.
Lynn
1
Czym to się różni {Q?
isaacg
1
@isaacg To posortowane
Ypnypn