Saya baru-baru ini mencoba menerapkan algoritma peringkat, AllegSkill, ke Python 3.
Seperti apa matematika itu:
Inilah yang saya tulis:
t = (µw-µl)/c # those are used in
e = ε/c # multiple places.
σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5
Saya benar-benar berpikir itu disayangkan dari Python 3 untuk tidak menerima √
atau ²
sebagai nama variabel.
>>> √ = lambda x: x**.5
File "<stdin>", line 1
√ = lambda x: x**.5
^
SyntaxError: invalid character in identifier
Apakah saya sudah gila? Haruskah saya menggunakan versi ASCII saja? Mengapa? Bukankah hanya versi ASCII di atas yang lebih sulit untuk memvalidasi kesetaraan dengan formula?
Pikiran Anda, saya mengerti beberapa mesin terbang Unicode terlihat sangat mirip satu sama lain dan beberapa seperti (atau apakah itu ▗▖) atau ╦ tidak bisa masuk akal dalam kode tertulis. Namun, ini hampir tidak berlaku untuk Matematika atau mesin terbang panah.
Per permintaan, versi ASCII saja akan menjadi sesuatu di sepanjang baris:
winner_sigma_new = ( winner_sigma ** 2 *
( 1 -
( winner_sigma ** 2 -
general_uncertainty ** 2
) * Wwin(t,e)
) + dynamics ** 2
)**.5
... per setiap langkah algoritma.
sqrt = lambda x: x**.5
mendapat saya fungsi (lebih tepatnya, sebuah callable):sqrt(2) => 1.41421356237
.Jawaban:
Saya merasa kuat bahwa hanya mengganti
σ
dengans
atausigma
akan menjadi bodoh, berbatasan dengan mati otak.Apa potensi keuntungannya? Baiklah, mari kita lihat ...
Apakah ini meningkatkan keterbacaan? Tidak, tidak sedikit pun. Jika demikian, formula aslinya pasti akan menggunakan huruf Latin juga.
Apakah itu meningkatkan kemampuan menulis? Pada pandangan pertama, ya. Tetapi pada yang kedua, tidak. Karena formula ini tidak akan pernah berubah (yah, “tidak pernah”). Biasanya tidak perlu mengubah kode, atau memperpanjangnya menggunakan variabel-variabel ini. Jadi kemampuan menulis - hanya sekali ini - bukan masalah.
Secara pribadi, saya pikir bahasa pemrograman memiliki satu keunggulan dibandingkan rumus matematika: Anda dapat menggunakan pengidentifikasi ekspresif yang bermakna. Dalam matematika, ini biasanya tidak demikian, jadi kami menggunakan variabel satu huruf, kadang-kadang membuatnya menjadi bahasa Yunani.
Tetapi bahasa Yunani bukanlah masalahnya. Pengidentifikasi satu huruf non-deskriptif adalah.
Jadi baik menjaga notasi asli ... setelah semua, jika bahasa pemrograman tidak mendukung Unicode di pengidentifikasi, jadi tidak ada hambatan teknis. Atau gunakan pengidentifikasi yang bermakna. Jangan hanya mengganti mesin terbang Yunani dengan mesin terbang Latin. Atau yang Arab, atau yang Hindi.
sumber
.properties
File Java sepele untuk diurai. Jika Anda benar-benar bekerja dengan rantai alat yang, didukung oleh.properties
file, tidak mendukung Unicode, sepenuhnya masuk akal untuk melepaskan rantai alat tersebut (dan menggantinya sendiri, menemukan alternatif, atau, dalam kasus terburuk, komisi satu ). Tentu saja ini tidak berlaku untuk sistem lama. Tetapi untuk sistem lama tidak ada pertimbangan untuk praktik terbaik yang pernah berlaku.Secara pribadi, saya akan benci melihat kode di mana saya harus membuka peta karakter untuk mengetiknya lagi. Meskipun unicode sangat cocok dengan apa yang ada dalam algoritme, itu benar-benar merusak kemampuan baca dan kemampuan untuk mengedit. Beberapa editor bahkan mungkin tidak memiliki font yang mendukung karakter itu.
Bagaimana dengan alternatif dan hanya naik ke atas
//µ = u
dan menulis semuanya di ascii?sumber
{
dan}
(yang gagal pada ttys btw) dan benar-benar kurang`
dan~
... bagaimana mungkin skrip Bash tidak mengharuskan saya untuk menggunakan peta karakter, jika saya tidak menggunakan custom keymap? :)TeX
danrfc1345
.TeX
hanya seperti apa rasanya; itu memungkinkan Anda mengetik\sigma
untukσ
dan\to
untuk→
.rfc1345
memberi Anda beberapa kombinasi seperti&s*
untukσ
dan&->
untuk→
. Sebagai aturan praktis, saya tidak khawatir tentang mengakomodasi programmer menggunakan editor yang kurang mampu daripada Emacs.Argumen ini mengasumsikan Anda tidak memiliki masalah dengan mengetikkan unicodes atau membaca huruf yunani
Inilah argumennya: Anda ingin pi atau circular_ratio?
Dalam hal ini, saya lebih suka pi ke circular_ratio karena saya sudah belajar tentang pi sejak saya masih di sekolah dasar dan saya bisa berharap definisi pi sudah mendarah daging bagi setiap programmer yang membutuhkan garamnya. Oleh karena itu saya tidak keberatan mengetik π berarti circular_ratio.
Namun, bagaimana dengan itu
atau
Bagi saya, kedua versi itu sama-sama buram, persis seperti
pi
atau apaπ
adanya, kecuali saya tidak belajar rumus ini di sekolah dasar.winner_sigma
danWwin
tidak ada artinya bagi saya, atau bagi orang lain yang membaca kode, dan menggunakan keduanyaσw
tidak membuatnya lebih baik.Jadi, menggunakan nama deskriptif, misalnya
total_score
,winning_ratio
dll akan meningkatkan keterbacaan jauh lebih baik daripada menggunakan nama ascii yang hanya melafalkan huruf yunani . Masalahnya bukan bahwa saya tidak bisa membaca huruf Yunani, tapi saya tidak bisa menghubungkan karakter (Yunani atau tidak) dengan "makna" dari variabel.Anda pasti mengerti masalah sendiri ketika Anda berkomentar:
You should have seen the paper. It's just eight pages...
. Masalahnya adalah jika Anda mendasarkan penamaan variabel Anda di atas kertas, yang memilih nama huruf tunggal untuk keringkasan daripada keterbacaan (terlepas apakah mereka Yunani), maka orang harus membaca kertas untuk dapat mengaitkan surat-surat dengan "berarti"; ini berarti Anda menempatkan penghalang buatan bagi orang untuk dapat memahami kode Anda, dan itu selalu merupakan hal yang buruk.Bahkan ketika Anda tinggal di dunia ASCII saja, keduanya
a * b / 2
danalpha * beta / 2
rendering yang sama buram dariheight * base / 2
, rumus area segitiga. Ketidak terbaca menggunakan variabel huruf tunggal tumbuh secara eksponensial ketika formula tumbuh dalam kompleksitas, dan formula AllegSkill tentu bukan formula yang sepele.Variabel huruf tunggal hanya dapat diterima sebagai penghitung putaran sederhana, apakah itu huruf tunggal Yunani atau huruf tunggal ascii, saya tidak peduli; tidak ada variabel lain yang hanya terdiri dari satu huruf. Saya tidak peduli jika Anda menggunakan huruf yunani untuk nama Anda, tetapi ketika Anda menggunakannya, pastikan saya dapat mengaitkan nama-nama itu dengan "makna" tanpa perlu membaca kertas yang sewenang-wenang di tempat lain.
Ketika di sekolah dasar, saya pasti tidak keberatan melihat ekspresi matematika menggunakan simbol seperti: +, -, ×, ÷, untuk aritmatika dasar dan √ () akan menjadi fungsi akar-persegi. Setelah saya lulus sekolah dasar, saya tidak keberatan dengan penambahan simbol baru yang mengkilap: ∫ untuk integrasi. Perhatikan trennya, ini semua operator. Operator jauh lebih banyak digunakan daripada nama variabel, tetapi mereka lebih jarang digunakan kembali untuk makna yang sama sekali berbeda (dalam kasus di mana ahli matematika menggunakan kembali operator, makna baru sering masih memiliki beberapa sifat dasar dari makna lama; ini bukan kasus untuk saat menggunakan kembali nama variabel).
Kesimpulannya, tidak, itu tidak buruk untuk menggunakan karakter Unicode untuk nama variabel; Namun, selalu buruk untuk menggunakan nama huruf tunggal untuk nama variabel, dan diizinkan untuk menggunakan nama Unicode bukan lisensi untuk menggunakan nama variabel huruf tunggal.
sumber
error_on_measured_skill_with_99th_percent_confidence
bukansigma
.// σw = skill level measurement error
, dll.Apakah kamu mengerti kodenya? Apakah semua orang yang perlu membacanya? Jika demikian, tidak ada masalah.
Secara pribadi saya akan senang melihat bagian belakang kode sumber ASCII saja.
sumber
Ya, Anda tidak waras. Saya pribadi akan merujuk nomor kertas dan formula dalam komentar, dan menulis semuanya dalam ASCII lurus. Kemudian, siapa pun yang tertarik akan dapat mengkorelasikan kode dan rumusnya.
sumber
Saya akan mengatakan menggunakan nama variabel Unicode adalah ide yang buruk karena dua alasan:
Mereka adalah PITA untuk mengetik.
Mereka sering terlihat hampir sama dengan huruf bahasa Inggris. Ini adalah alasan yang sama mengapa saya benci melihat huruf Yunani dalam notasi matematika. Coba ceritakan selain dari hal. Ini tidak mudah.
sumber
Dalam satu kasus ini, rumus matematika yang rumit, saya akan mengatakan untuk itu.
Saya dapat mengatakan dalam 20 tahun saya tidak pernah harus kode sesuatu yang kompleks dan huruf yunani ini tetap dekat dengan matematika asli. Jika Anda tidak dapat memahaminya, Anda seharusnya tidak memeliharanya.
Mengatakan itu, jika saya harus memelihara μ dan σ dalam kode standar rawa yang Anda wariskan kepada saya, saya akan mencari tahu di mana Anda tinggal ...
sumber
Seberapa besar risikonya bagi Anda? Apakah keuntungan melebihi risiko?
sumber
Suatu saat dalam waktu yang tidak terlalu lama, kita semua akan menggunakan editor teks / IDE / browser web yang membuatnya mudah untuk menulis teks edit termasuk karakter Yunani Klasik, dll. (Atau mungkin kita semua akan belajar menggunakan ini "disembunyikan "fungsionalitas dalam alat yang saat ini kami gunakan ...)
Tetapi sampai itu terjadi, karakter non ASCII dalam kode sumber program akan sulit untuk ditangani oleh banyak programmer, dan karena itu ide yang buruk jika Anda menulis aplikasi yang mungkin perlu dikelola oleh orang lain.
(Kebetulan alasan Anda dapat memiliki karakter Yunani tetapi bukan tanda akar kuadrat dalam pengidentifikasi Python adalah sederhana. Karakter Yunani diklasifikasikan sebagai Unicode Letters, tetapi tanda akar kuadrat adalah bukan huruf; lihat http://www.python.org / dev / peps / pep-3131 / )
sumber
\mu
dan menginstalnyaµ
.Anda tidak mengatakan apa bahasa / kompiler yang Anda gunakan, tetapi biasanya aturan untuk nama variabel adalah bahwa mereka harus mulai dengan karakter alfabet atau garis bawah, dan hanya berisi alfanumerik dan garis bawah. Unicode √ tidak akan dianggap alfanumerik, karena itu adalah simbol matematika dan bukan huruf. Namun σ mungkin (karena itu dalam alfabet Yunani) dan á mungkin akan dianggap alfanumerik.
sumber
Saya memposting pertanyaan yang sama di StackOverflow
Saya pasti berpikir bahwa itu layak menggunakan unicode dalam masalah terkait matematika yang berat, karena memungkinkan untuk membaca rumus secara langsung, yang tidak mungkin dilakukan dengan ASCII biasa.
Bayangkan sesi debugging: tentu saja Anda selalu dapat menulis formula yang seharusnya dikomputasi dengan kode untuk melihat apakah benar. Tapi sembilan puluh persen dari waktu, Anda tidak akan repot-repot dan bug bisa tetap tersembunyi untuk waktu yang lama. Dan tidak ada yang pernah mau melihat formula ASCII 7-garis muskil ini. Tentu saja, menggunakan unicode tidak sebagus formula yang dibuat tex, tetapi jauh lebih baik.
Alternatif menggunakan nama deskriptif panjang tidak dapat dilakukan karena dalam matematika, jika pengenalnya tidak pendek, rumusnya akan terlihat lebih rumit (mengapa Anda berpikir orang, sekitar abad XVIII, mulai mengganti "tambah" dengan "+" dan "minus" dengan "-"?).
Secara pribadi, saya juga akan menggunakan beberapa subskrip dan superskrip (saya hanya menyalin-menempelkannya dari halaman ini ). Misalnya: (seandainya python diizinkan √ sebagai pengidentifikasi)
Di mana saya menggunakan superskrip karena tidak ada yang setara dengan subscript di unicode. (Sayangnya, rangkaian karakter subscript unicode sangat terbatas. Saya berharap suatu hari, subscript dalam unicode akan dianggap sebagai diakritik, yaitu kombinasi dari satu karakter untuk subskrip, dan karakter lain untuk huruf yang disalin)
Satu hal terakhir, saya pikir percakapan tentang penggunaan karakter non-ASCII ini bias, karena banyak programmer tidak pernah berurusan dengan "rumus matematika intensif". Jadi mereka berpikir bahwa pertanyaan ini tidak begitu penting, karena mereka tidak pernah mengalami bagian kode yang signifikan yang akan memerlukan penggunaan pengidentifikasi non-ASCII. Jika Anda salah satu dari mereka (dan saya baru-baru ini), pertimbangkan ini: anggaplah bahwa huruf "a" bukan bagian dari ASCII. Maka Anda akan memiliki ide yang cukup bagus tentang masalah tidak memiliki huruf Yunani, subskrip, superskrip ketika menghitung rumus matematika non-sepele.
sumber
Apakah kode ini hanya untuk proyek pribadi Anda? Jika demikian, gila, gunakan apa pun yang Anda inginkan.
Apakah kode ini dimaksudkan untuk digunakan orang lain? yaitu, dan aplikasi open source semacam itu? Jika demikian, Anda mungkin hanya meminta masalah karena programmer berbeda menggunakan editor yang berbeda, dan Anda tidak dapat memastikan bahwa semua editor akan mendukung unicode dengan benar. Ditambah lagi, tidak semua shell perintah akan menampilkannya dengan benar ketika file kode sumber diketik / cat'd, dan Anda mungkin mengalami masalah jika Anda perlu menampilkannya dalam html.
sumber
secara pribadi saya termotivasi untuk mempertimbangkan bahasa pemrograman sebagai alat untuk matematikawan dalam konteks ini, karena saya tidak benar-benar menggunakan matematika yang terlihat seperti itu dalam hidup saya. : D Dan tentu saja, mengapa tidak menggunakan ɛ atau σ atau apa pun - dalam konteks itu, sebenarnya lebih mudah dibaca.
(Meskipun, saya harus mengatakan, preferensi saya adalah mendukung nomor superskrip sebagai panggilan metode langsung, bukan nama variabel. Misalnya 2² = 2 ** 2 = 4, dll.)
sumber
Apa itu
σ
, apaW
, apaε
,c
dan apaγ
?Anda akan memberi nama variabel Anda dengan cara yang menjelaskan apa tujuan mereka.
Saya pribadi akan memukuli siapa saja yang meninggalkan Unicode atau versi ASCII untuk saya pertahankan, meskipun versi ASCII lebih baik.
Apa yang jahat adalah memanggil variabel
σ
ataus
atausigma
atauvalue
atauvar1
, karena ini tidak menyampaikan informasi apapun.Dengan asumsi Anda menulis kode Anda dalam bahasa Inggris (seperti yang saya percaya Anda harus dari mana pun Anda berasal), ASCII harus cukup untuk memberikan variabel Anda nama yang bermakna, sehingga tidak ada kebutuhan aktual untuk Unicode.
sumber
rank_error_with_99_pct_confidence
ini terlalu lama untuk ini dan tidak akan membuat formula lebih mudah untuk dipahami. AllegSkill / TrueSkill menyebut sigma tersebut, jadi saya percaya sangat diterima bagi saya untuk mempertahankan nama domain spesifik yang mereka miliki.rank_error
dan letakkan detail ekstra tentang kepercayaan 99 persen dalam dokumentasi / komentar di suatu tempat.Untuk nama variabel dengan asal matematika terkenal ini benar-benar dapat diterima - bahkan lebih disukai. Tetapi jika Anda pernah berharap untuk mendistribusikan kode, Anda harus menempatkan nilai-nilai ini dalam modul, kelas, dll. Sehingga IDE auto-complete dapat menangani "mengetik" karakter aneh.
Menggunakan √ atau ² dalam pengidentifikasi - tidak banyak.
sumber