최근에 Python 3에 순위 알고리즘 AllegSkill을 구현하려고했습니다.
수학은 다음과 같습니다.
이것은 내가 쓴 것입니다 :
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
실제로 파이썬 3가 변수 이름을 받아들이지 √
않거나 ²
변수 이름으로 사용 하는 것이 불행하다고 생각했습니다 .
>>> √ = lambda x: x**.5
File "<stdin>", line 1
√ = lambda x: x**.5
^
SyntaxError: invalid character in identifier
나는 내 마음에서 벗어나 있습니까? ASCII 전용 버전을 사용해야합니까? 왜? 위의 ASCII 전용 버전이 수식과 동등한 지 확인하는 것이 더 어렵지 않습니까?
일부 유니 코드 글리프는 서로 매우 비슷하게 보이고 (또는)) 또는 ╦와 같이 작성 된 코드에서는 의미가 없습니다. 그러나 이것은 수학이나 화살표 그림에는 해당되지 않습니다.
요청에 따라 ASCII 전용 버전은 다음과 같습니다.
winner_sigma_new = ( winner_sigma ** 2 *
( 1 -
( winner_sigma ** 2 -
general_uncertainty ** 2
) * Wwin(t,e)
) + dynamics ** 2
)**.5
… 알고리즘의 각 단계마다.
답변
난 그냥 교체 할 것을 강하게 느낄 수 σ
로 s
또는 sigma
뇌사에 경계, 바보 될 것입니다.
잠재적 인 이익은 무엇입니까? 음 .. 어디 한번 보자 …
-
가독성이 향상됩니까? 아뇨, 조금도 아닙니다. 그렇다면 원래의 수식은 의심 할 여지없이 라틴 문자를 사용했을 것입니다.
-
쓰기 가능성이 향상됩니까? 언뜻보기에, 그렇습니다. 그러나 두 번째는 아닙니다. 이 공식은 절대 변하지 않기 때문에 (“그렇지 않습니다”). 일반적으로 코드를 변경하거나 이러한 변수를 사용하여 코드를 확장 할 필요가 없습니다. 따라서 한 번만 쓸 수있는 쓰기 기능은 문제가되지 않습니다.
개인적으로 저는 프로그래밍 언어가 수학 공식에 비해 한 가지 이점이 있다고 생각합니다. 의미 있고 표현적인 식별자를 사용할 수 있습니다. 수학에서는 일반적으로 그렇지 않으므로 한 글자 변수에 의존하여 때로는 그리스어로 만듭니다.
그러나 그리스어는 문제가되지 않습니다. 설명이없는 한 글자로 된 식별자입니다.
프로그래밍 언어 가 유니 코드를 지원하는 유니 코드를 지원 한다면 기술적 인 장벽은 없습니다. 또는 의미있는 식별자를 사용하십시오. 그리스 문자를 라틴 문자로 바꾸지 마십시오. 또는 아랍어 또는 힌디어.
답변
개인적으로, 다시 입력하기 위해 문자표를 불러 와야하는 코드가 싫습니다. 유니 코드가 알고리즘의 내용과 밀접하게 일치하더라도 가독성과 편집 기능이 실제로 손상됩니다. 일부 편집기에는 해당 문자를 지원하는 글꼴이 없을 수도 있습니다.
대안은 //µ = u
어떻습니까? 위에 올라서 모든 것을 ASCII로 작성하십시오.
답변
이 인수는 유니 코드를 입력하거나 그리스 문자를 읽는 데 아무런 문제가 없다고 가정합니다.
여기에 논쟁이 있습니다 : pi 또는 circle_ratio를 원하십니까?
이 경우, 나는 초등학교 때부터 pi에 대해 배웠고 pi의 정의가 그의 소금 가치가있는 모든 프로그래머에게 잘 뿌리 내릴 것으로 기대할 수 있기 때문에 pi를 circle_ratio보다 선호합니다. 따라서 Circular_ratio를 의미하기 위해 π를 입력해도 상관 없습니다.
그러나 어떻습니까?
winner_sigma_new = ( winner_sigma ** 2 *
( 1 -
( winner_sigma ** 2 -
general_uncertainty ** 2
) * Wwin(t,e)
) + dynamics ** 2
)**.5
또는
σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5
나를 위해, 두 버전처럼 똑같이 불투명 pi
또는 π
이다 제외하고 내가 초등학교에서이 공식을 배울하지 않았다. winner_sigma
그리고 Wwin
나에게 또는 코드를 읽는 다른 사람에게는 아무것도 의미 σw
하지 않으며 둘 다 사용 하면 더 나아지지 않습니다.
따라서, 예를 들어 total_score
, winning_ratio
등의 설명적인 이름을 사용하면 그리스 문자 만 발음 하는 ASCII 이름을 사용하는 것보다 가독성이 훨씬 향상 됩니다. 문제는 그리스 문자를 읽을 수 없다는 것이 아니라 문자 (그리스어인지 아닌지)를 변수의 “의미”와 연관시킬 수 없다는 것입니다.
다음과 같이 언급 할 때 문제를 직접 이해했습니다 You should have seen the paper. It's just eight pages...
. 문제는 가독성에 관계없이 간결성을 위해 단일 문자 이름을 선택하는 종이를 기반으로 변수 이름을 지정하는 경우 (그들은 그리스어인지 여부에 관계없이) 사람들이 문자를 “의미”; 즉, 사람들이 코드를 이해할 수 있도록 인공 장벽을 설정한다는 것은 항상 나쁜 일입니다.
심지어 당신은 ASCII 전용 세상에서 살고, 모두시 a * b / 2
와 alpha * beta / 2
의 동등 불투명 렌더링입니다 height * base / 2
, 삼각형 지역 공식. 수식이 복잡 해짐에 따라 단일 문자 변수를 사용할 수없는 가독성이 기하 급수적으로 증가하며 AllegSkill 수식은 사소한 수식이 아닙니다.
단일 문자 변수는 그리스 단일 문자 또는 ASCII 단일 문자인지 여부에 관계없이 간단한 루프 카운터로만 사용할 수 있습니다. 다른 변수는 단일 문자로만 구성되어서는 안됩니다. 나는 당신이 당신의 이름으로 그리스 문자를 사용하는지 상관하지 않지만, 당신이 그것들을 사용할 때, 다른 곳에서 임의의 종이를 읽을 필요없이 그 이름을 “의미”와 연관시킬 수 있는지 확인하십시오.
초등학교 때, 나는 기본 산술을 위해 +,-, ×, ÷와 같은 기호를 사용하는 수학 표현을 보지 못하고 √ ()는 제곱근 함수입니다. 초등학교를 졸업 한 후에는 통합을 위해 새롭고 반짝이는 새 기호를 추가하지 않아도됩니다. 트렌드에 주목하십시오. 이들은 모두 운영자입니다. 연산자는 변수 이름보다 훨씬 많이 사용되지만 완전히 다른 의미로 재사용되는 경우는 거의 없습니다 (수학자가 연산자를 재사용하는 경우 새로운 의미는 여전히 오래된 의미의 일부 기본 속성을 보유합니다. 변수 이름을 재사용 할 때).
결론적으로, 변수 이름에 유니 코드 문자를 사용하는 것은 나쁘지 않습니다. 그러나 변수 이름에 단일 문자 이름을 사용하는 것은 항상 좋지 않으며 유니 코드 이름 사용이 단일 문자 변수 이름을 사용할 수있는 라이센스가 아닙니다.
답변
코드를 이해합니까? 다른 사람이 읽어야합니까? 그렇다면 아무런 문제가 없습니다.
개인적으로 ASCII 전용 소스 코드의 뒷면을 보게되어 기쁩니다.
답변
예, 당신은 당신의 마음에서 벗어났습니다. 주석에서 종이와 수식 번호를 개인적으로 참조하고 모든 것을 직선 ASCII로 작성합니다. 그러면 관심있는 사람은 코드와 수식을 상관시킬 수 있습니다.
답변
유니 코드 변수 이름을 사용하는 것은 두 가지 이유로 나쁜 생각이라고 말합니다.
-
그들은 타이핑하는 PITA입니다.
-
그들은 종종 영어 문자와 거의 동일하게 보입니다. 이것이 내가 수학 표기법으로 그리스 문자를 보는 것을 싫어하는 이유와 같습니다. p와는 별도로 rho에게 알려주십시오. 쉽지 않습니다.
답변
이 경우에는 복잡한 수학 공식이 있습니다.
나는 20 년 안에이 복잡한 그리스 문자가 원래 수학에 가깝게 유지하는 것을 코딩 할 필요가 없었다고 말할 수있다. 이해할 수 없으면 유지해서는 안됩니다.
내가 μ 당신이 저를 물려 σ 늪지에 표준 코드를 유지해야하는 경우, 그 말을 나는 것 어디 라이브 찾아 …