문제

저는 몇 달 전에 J/K/APL을 접하게 되었습니다. 프로젝트 오일러 문제가 있었고, 적어도 흥미를 느꼈습니다.내가 생산한 모든 우아해 보이는 20줄 Python 솔루션에는 엄청난 20줄이 있을 것입니다. 성격 10분의 1의 시간 안에 실행되는 J 솔루션입니다.나는 몇 가지 기본적인 J를 배우고 싶었고 어휘를 배우려고 몇 번 시도했지만 학습 곡선이 상당히 가파르다는 것을 알았습니다.

이 언어들에 익숙한 사람들에게 시간을 투자하여 하나를 배우는 것이 좋습니다(특히 J라고 생각합니다).나는 경력 발전이나 그런 것보다 호기심을 충족시키기 위한 목적으로 그렇게 할 것입니다.

고려해야 할 몇 가지 개인적인 상황은 다음과 같습니다.

  • 저는 수학을 좋아하고 업무에 매일 수학을 사용합니다(스타트업의 수학자로서). 하지만 솔직히 말해서 제가 사용하는 도구(예: Python + NumPy)에 제한을 받지 않기 때문에 그런 변명은 할 수 없습니다. .
  • 저는 적어도 K유저들의 주요 통화처인 금융업에 특별히 일하고 싶은 마음은 없습니다.게다가 제가 일하는 기본 언어인 C#을 다음 언어로 배워야 합니다.따라서 실질적으로 말하면 J는 거의 확실합니다. 해서는 안 된다 내가 배우는 다음 언어가 되세요.
  • 저는 MATLAB에 상당히 익숙하므로 배열 기반 프로그래밍 언어를 사용해도 엄청난 패러다임 전환이 이루어지지는 않습니다.

이러한 언어에 익숙한 분들의 조언을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

수천 년 전에 저는 APL 프로그래머였습니다. 수천 명의 사람들은 '70 년대에 맞춤형 캐릭터 세트가 APL 키보드와 캐릭터 세트가있는 특수 인쇄 터미널, 특수 문자 등이있는 IBM Selectric Typeball을 의미했을 때'70 년대를 의미합니다.

나는 Ken Iverson의 "APL이 멋진 이유"에 대한 강의에 갔다.

그의 논문은 이것이었습니다. 옛날 옛적에 긴 분열은 대학원생들을 위해 예약 된 심각한 수학적 사업이었습니다. 소수점 확장을 반복하는 것과 같은 것들에 대한 표기법에는 수학적 상징의 큰 더미가 포함되었습니다. 옛날 옛적에 "음수"숫자와 같은 것이 정교한 표기법이 필요했습니다.

우리가 이러한 추상화를 더 잘 이해하면서 수년에 걸쳐 복잡한 개념에 대한 훨씬 더 컴팩트 한 표기법을 제시했습니다.

APL (및 J 및 K)의 요점은 큰 알고리즘을 깔끔한 표기법으로 요약하는 것입니다.

요즘 저는 파이썬 프로그래머입니다. APL에 대한 초기 노출이 "이것이 무엇을 의미 하는가?" 그리고 "이것은 재사용 가능한 작업입니까?" 그리고 "이 모든 알고리즘 보풀에 대한 엄청난 요약은 무엇입니까?"

또한, 내가 추구 할 때 프로젝트 오일러 문제 "APL의 진수에 빠진 기억"에 의해 뒷받침 된 Python의 "기능적 프로그래밍 라이트"는 운동을 다루는 데 매우 도움이됩니다.

다른 팁

J는 프로젝트 Euler 및 직장에서 개인 용도를위한 주요 프로그래밍 언어입니다. 나는 배열 처리를위한 더 나은 언어를 본 적이 없으며, Tacit 프로그래밍 패러다임은 당신이 그것을 잡으면 유용하고 생각을 자극합니다. (실제로 생각을 자극하기 때문에 유용합니다.) 언어의 엔트리 레벨 역량에 도달하는 것은 어렵고, 다른 사람들의 코드를 읽는 것은 지적 훈련 된 활동이지만 인내는 언어의 힘, 유연성 및 간결함으로 인해 큰 보상을받습니다.

즉, 내가 그것을 예약 한 이유 개인의 직장에서 사용하는 것은 (1) 직장에서 다른 사람이 그것을 사용하지 않는다는 것입니다. (2) 학습 곡선이 충분히 가파르 기 때문에 동료들에게 그것을 집어달라고 요청하는 것이 합리적이지 않고 (3) 당신이 구축 할 수 있다는 사실 한 줄의 코드로 복잡한 프로그램을 통해 코드 라인을 읽는 것이 어려워집니다. 특히 직접 작성하지 않은 경우. (기본 원리를 철저히 이해하는 방식으로 사용되지 않는 한 10 명 이상의 연산자를 사용하는 코드 라인을 공부하는 데 적어도 30 분 이상 소비 할 것으로 예상합니다.)

재미있는 J 기능의 몇 가지 예 :

1) 단일 숫자로 작동하도록 정의 된 기능은 임의 순위의 배열에서 작동하도록 만들 수 있습니다. 예를 들어:

NB. totient(n) = n * \prod_{p|n} (1 - 1/p)
totient=: * -.@%@~.&.q:

NB. Finding the totient of 10
totient 10

NB. Finding the totient of all numbers from 1 to 10
totient"0 (1+i.10)

정확히 같은 함수이며 1xn 입력 어레이의 원자 (단일 요소 구성 요소)에서 작동합니다. 마찬가지로, 순위 -2 배열 (행렬)에서 작동하도록 정의 된 함수를 가져 와서 "(순위) 연결을 사용하여 더 높은 순위 배열에 적용 할 수 있습니다.

2) J에서 이론적으로 뒤집을 수있는 기능을 거의 취하고 '뒤로 반복'하여 반전 할 수 있습니다. 예를 들어,

NB. Converts an array of binary digits to a decimal number
(#.) 1 0 1
5

NB. Converts a decimal number to an array of binary digits
(#.^:_1) 5
1 0 1

나는 지난 25 년 동안 대부분의 J와 APL에서 일했으며 두 가지를 철저히 추천 할 수 있습니다. 나는 여전히 내가 가지고있을 때 여전히 하나 또는 다른쪽으로 되돌아갑니다. 어느 임시 데이터 분석의 형태와 프로젝트 Euler에서도 사용했습니다.

Project Euler에 관심이 있다면 J는 분명히 선택해야합니다. 무한한 정밀 정수와 프라임에 대한 지원은 매우 적합합니다.

나는 1980 년부터 APL로 생활하게합니다. 나는 앞으로 몇 년 동안 계속 그렇게 할 수있는 희미한 모습을 보이고 있습니다. APL을 사용하는 것은 큰 재미 일뿐 만 아니라 언어는 뛰어난 디버깅 기능을 제공합니다. 최신 구현은 기능적 언어이며 객체 지향적입니다.

나는 몇 년 동안 많은 사람들이 APL을 계속할 수 있을지 물어 보았습니다. 그 사람들은 DBase와 PL/1, Algol과 Pascal과 C, C, Focus 및 기타 프로그래머였습니다. 알았어요?!

J는 지니와 약간 비슷합니다. 병 안에 보관해야합니다. J에서 많은 배치 소프트웨어를 유지하는 것은 심각한 고통입니다. j에서 인터페이스 유지 (Windows 또는 웹 기반, 예, Apache에 답변하기 위해 J를 설정할 수 있기 때문에 J.

반면에, Parse, Sift, Analyze, Crunch 등을 원하는 경우 J를 사용하는 것이 좋습니다. 데이터와 함께 바이올린 데이터, 알고리즘의 미세한 입자를 파악하거나 감동을주는 데이터. 인터넷 원에 얼마나 많은 삼각형이 적합한 지 또는 그렇지 않은지를 계산하는 가장 짧은 방법으로.

나는 Careers 프로필의 거래 차단기로 J를 추가하는 데 매우 가까워졌습니다. careers.stackoverflow.com, 그러나 나는 궁극적으로 그것을 남겼습니다. 나에게 j를 사용하는 것은 괜찮으며 J를 생산하는 것은 아닙니다.

편집하다:

얼마 전였습니다. 나는 여전히 생산에서 완전한 J 솔루션 (즉, 모든 MVC)이 나쁘다고 생각합니다. 원래 응답 이후, 나는 C# 프로젝트에서 COM으로 J를 사용했는데, 여기서 j는 C#에서 관리하기가 어렵고 만족스러운 큰 매트릭스를 제공합니다.

우리의 작업의 일부는 데이터 모델과 코드를 만드는 것입니다. 말하다. 그 품질과 J의 매우 간결한 구문을 연결하는 것은 쉽지 않습니다. J와 달리 여러 프레임 워크는 IDE와 함께 작업하기 쉬우 며, 인간적으로 읽을 수있는 방식으로 코드를 정렬 할 수있는 충분한 지원이 있습니다. J의 über-matrix 기능은 부족한 것을 보상하지 않습니다.

나는 당신의 3 점은 당신이 J를 배울 필요가 없다는 것을 보여줍니다. 그러나 나는 새로운 언어를 배우는 것이 해로운 상황을 생각할 수 없습니다.

관심있는 것을 배우기 위해 시간을내어 (또는 새로운 언어)는 항상 다른 프로그래밍 기술을 향상시킵니다. 다른 언어와 다르게 구현할 수있는 문제에 대한 다른 접근법을 배웁니다.

또한 J의 최소 구문을 사용하면 다른 언어로 솔루션을 구현할 때 올바른 결과를 얻는 것이 좋은 언어 일 것입니다.

옛날에 저는 370 어셈블러로 코딩하는 APL 언어 개발자였습니다.J를 OS2로 포팅했지만 실제 작업에 사용하는 방법을 배운 적이 없습니다.저는 현재 Java와 PHP로 작업 중이며 Python을 평가하고 있었습니다.Python 튜토리얼의 처음 3개 섹션을 읽은 후 저는 APL과 많은 유사점에 놀랐고, 그로 인해 여기까지 왔습니다.

나는 지적 훈련으로 APL이나 J를 배우는 것을 강력히 추천합니다.이는 프로그래밍에 대한 사고 방식을 바꾸고(뇌를 뒤틀림) 아마도 Python 코딩에 도움이 될 것입니다.또한 APL 및 J 프로그래머를 위한 직업이 몇 개 있으며 아마도 직업보다 프로그래머 수가 적을 것입니다.

나는 1970년대에 몇 년 동안 APL 프로그래머로 일했습니다.나는 그 언어를 좋아하지만 수년 동안 그것을 사용하지 않았습니다.

어떤 면에서는 훌륭한 언어이지만 예를 들어 웹 개발에 사용하는 것은 상상할 수 없습니다.

그것이 좋은 점은 통계 및 행렬 연산입니다.라이너 프로그래밍 문제는 세 글자로 해결할 수 있습니다.예를 들어 C에서 페이지를 사용하는 것보다 LP 구현의 정확성을 증명하는 것이 훨씬 쉽습니다.

그러므로 배움의 즐거움을 위해 배우고 싶다면 그렇게 하라고 말씀드립니다.취업 전망을 향상시키기 위해 잠재적인 고용주에게 더 ​​깊은 인상을 줄 수 있는 다른 것들이 많이 있을 것입니다.

이것은 50 세의 나이 인 나를위한 재미있는 확인입니다.

오늘 초, 나는 27 년 간격으로 프로그래밍을 한 후 새로운 21 세기 프로그래밍 언어를 배우기로 결정했습니다. 나는 우리 모두가 살고있는 GUI 기반 및 대상 지향 세계를 무작위로 꽤 무작위로 선택했습니다.

기쁨에 따라, 80 년대 초반에 APL 남자로서 생계를 유지하는 것은 말 그대로 자료를 통해 즉각적인 이해력을 가지고 있다는 것을 의미합니다. :) 그냥 공유 할 것이라고 생각했습니다.

예, APL/J/K를 배우십시오. 가능한 것이 무엇인지 엿볼 수 있습니다.

나는 @mpelletier의 "원에 얼마나 많은 삼각형이 맞는가"와 그 암시 된 "... 그러나 실제 문제에 대한 것이 아님"은 약간의 근시안이라고 지적했다. 예, J 소프트웨어의 IDE는 몇 가지 부족하지만 자신의 IDE를 구축하는 것은 큰 문제가 아니며, 좋은 IDE는 나쁜 언어를 가릴 수 있습니다 (20 줄에서 20 개의 문자 수축은입니다. ~ 아니다 재채기를하기 위해.) 나는 @kaijaeger가 더 이상 있지 않더라도 APL을 해왔고, 내 마음이 뒤틀릴 수도 있지만, 나는 다른 어떤 것과 함께 프로그래밍 한 적이 없었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top