Làm thế nào Pyth có thể được cải thiện? [đóng cửa]


24

Pyth đang trong quá trình phát triển liên tục, có nghĩa là các tính năng mới đang được thêm vào mọi lúc.

Tôi muốn làm cho Pyth trở thành một ngôn ngữ tốt hơn, vì vậy tôi muốn biết những tính năng mà mọi người đang tìm kiếm.

Đây là nơi những ý tưởng bài viết bạn có để làm cho Pyth tốt hơn.

Trong câu trả lời của bạn, xin vui lòng nêu:

  • Những gì bạn muốn thấy đã thay đổi / thêm vào.

  • Một ví dụ sử dụng của sự thay đổi.

Tôi sẽ bình luận nếu tôi dự định thực hiện đề xuất.

Vui lòng kiểm tra xem ý tưởng bạn muốn đề xuất đã được đề xuất chưa. Upvote ý tưởng bạn muốn thực hiện.


Gợi ý thực hiện:


Đây là chủ đề theo câu hỏi meta này khi tôi đăng câu hỏi, nó không còn rõ ràng nữa.


1
Tại sao đây là một wiki cộng đồng?
Geobits

4
Đó là nhiều hơn một cuộc thảo luận và bộ sưu tập các đề xuất. Không ai nên đạt được hoặc mất đại diện khi đề xuất tính năng Pyth. Ngoài ra, đề xuất thực hiện có lẽ nên được xóa. Câu hỏi liên quan này cũng là wiki cộng đồng.
Dennis

9
Tôi không chắc tôi cảm thấy thế nào về những câu hỏi như thế này. Tôi có thể thấy rằng nó có ý nghĩa ở đây, bởi vì PPCG có thể bao gồm hầu hết (nếu không phải tất cả) cơ sở người dùng của Pyth, nhưng tôi không chắc chúng ta nên sử dụng nó như một công cụ theo dõi vấn đề. Tôi đã thêm một câu trả lời cho bài viết meta.
Martin Ender

Đây có phải là meta không? Nghiêm túc nhé các chàng trai
Alec Teal

2
@AlecTeal "Câu đố lập trình Meta & trao đổi mã sân golf là một phần của trang web nơi người dùng thảo luận về hoạt động và chính sách của Code Golf Stack Exchange thay vì thảo luận về câu đố lập trình hoặc tự viết mã golf." Meta đặc biệt về cộng đồng này . Nó thực sự không thuộc về meta. Cho dù nó thuộc về đây hay không trên PPCG hiện đang được thảo luận trong bài đăng meta tôi liên kết.
Martin Ender

Câu trả lời:


7

Vòng lồng nhau

Nếu bạn muốn lồng forcác vòng lặp, hiện tại bạn phải lãng phí một byte để sử dụng F<var><seq>bên trong a V<seq>hoặc ngược lại. Tôi muốn có điều tương tự như với lambdas, trong đó biến được sử dụng cho vòng lặp sẽ thay đổi khi các vòng lặp lồng nhau.


Điều này thậm chí có thể mở rộng cho những thứ khác như L, có thể xác định lại, nói, Clần thứ hai nó được gọi.
FryAmTheEggman


4

Nhập mô-đun dễ dàng hơn

Cho đến nay, mỗi lần tôi sử dụng, $nó là một thứ như:

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

Có thể có một chức năng mới tóm tắt điều này chẳng hạn .$:

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

Hoặc sử dụng cú pháp mới hơn như _Mcó thể không dễ / có thể thực hiện:

_$unicodedata name$

Ngoài ra, một hàm với mỗi arity có thể được cung cấp một tên macro một chữ cái để các cuộc gọi này có thể ngắn hơn (ngoại trừ _$tùy chọn).


4

Ngủ

Điều này gây ra rắc rối ở đây@ mbomb007 đề nghị đặt nó như một sự cải tiến cho Pyth . Về cơ bản, ngay bây giờ, để ngủ trong một số giây nhất định, tôi cần phải làm một cái gì đó như:

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

Mà là phiền phức và dài như quái.


Bạn có thể mô phỏng hành vi ngủ với chức năng ngày. f>.d1Q0ví dụ ngủ Qvài giây.
Jakube

@Jakube Điều đó không phải lúc nào cũng hoạt động. Theo các tài liệu, trên Unix, nó trả về thời gian chương trình đã chạy. Điều này là xấu khi người dùng đang nhập liệu.
kirbyfan64sos

Làm thế nào về điều này hơn : J.d0f>-.d0JQ0. Mặc dù nó khá dài ... Tôi đồng ý, chức năng ngủ sẽ rất tuyệt.
Jakube

4

Thêm lambdas

Đây thực sự là ý tưởng của FryAmTheEggman , nhưng tôi đang đăng nó để đưa nó ra khỏi đó.

Đôi khi tôi thấy rằng việc sử dụng hai lambdas một đối số khác nhau sẽ rút ngắn mã, trong khi phải sử dụng lambda hai đối số cho một đối số sẽ không.

Nó sẽ được tốt đẹp để có L, Mvà bạn bè xác định lại một chức năng khác nhau mỗi khi sử dụng; ví dụ: mã này:

L*b2L*b3y5'5

có thể biên dịch thành:

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

Sự lựa chọn chính xác của các chức năng có thể được thay đổi, tất nhiên.


3

Cải thiện mảng đa chiều

Hiện tại, việc sử dụng mảng đa chiều khá khó thực hiện. Ví dụ, mã C A[B][C][D]sẽ dịch sang @@@ABCDPyth. Một cái gì đó như @A[BCD)sẽ đẹp hơn nhiều (mặc dù không ngắn hơn ở đây). Điều tương tự cũng đi cho X; A[B][C][D] = Ehiện là X@@ABCDE, khi nó có thể được XA[BCD)E.


3

Một số ý tưởng nhỏ

  • Sự khác biệt tuyệt đối, tức là abs(val1 - val2). Hiện tại nó là .a-<val1><val2>.
  • min/ maxcho các giá trị. Hiện tại nó hS,<val1><val2>/ eS,<val1><val2>hoặc điều tương tự với nhiều giá trị hơn. ( hS<seq>/ eS<seq>cho các chuỗi là đủ ngắn.)

3

Không phải là một tính năng Pyth, nhưng tuy nhiên ...

Mô đun hóa mã Pyth

Điều này chỉ ảnh hưởng đến Pyth dưới mui xe. Một số phần của việc thực hiện Pyth khá lộn xộn. Rất nhiều biến toàn cầu và những thứ hacky khác.

Tôi thực sự đã nản lòng vài ngày trước, khi tôi đã thử sử dụng một vài chức năng của việc thực hiện Pyth (như thực thi một chuỗi các lệnh Pyth) từ một tập lệnh Python khác.

Một cái gì đó như sau sẽ là tốt đẹp:

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

Chà, tôi đoán đây chỉ là một cuộc gọi trợ giúp cho Pyth5.



1

Yếu tố độc đáo

Pyth hiện không có cách nào ngắn để có được các yếu tố độc đáo của chuỗi. Bạn có thể kiểm tra xem nó có độc đáo không, nhưng bạn không thể có được những món đồ thực sự độc đáo. Hiện tại, cách ngắn nhất là :

{.-Q{Q

6 byte! So sánh với K, trong đó việc lấy các phần tử duy nhất là thao tác một byte : =x.

Có lẽ .}sẽ làm việc ở đây?


Những trường hợp sử dụng (khác với một thách thức) bạn đang nghĩ đến?
isaacg

@isaacg Tôi không thể nhớ lại, nhưng tôi đã phải thử và lấy các yếu tố duy nhất của danh sách trước đó và phải sử dụng một cái gì đó khác (luôn luôn dài hơn).
kirbyfan64sos

Tôi không phải là lập trình viên Pyth, nhưng tôi luôn gặp phải vấn đề này trong GolfScript / CJam: .&resp. _&xuất hiện trong rất nhiều câu trả lời. Nó rất hữu ích.
Lynn

1
Điều này khác với {Qnhư thế nào?
isaacg

1
@isaacg Nó được sắp xếp
Ypnypn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.