GolfScript의 개선 된 버전


12

더 많은 일을 할 수있는 더 짧은 프로그램을 위해 향상된 GolfScript를 작성할 계획입니다. 이것은 도전이 아닙니다. 그것은 내가해야 할 일에 대한 피드백과 팁을 요청합니다. (태그 참조)

커뮤니티 Wiki인지 확실하지 않습니다. 그렇게 생각하면 중재자에게 플래그를 지정하여 변환하십시오. :)

이 언어는 GolfScript와 매우 유사합니다. 여전히 루비로 작성되었습니다. 그러나 몇 가지 차이점이 있습니다.

  • `드문 문자이기 때문에 문자열 구분 기호로 사용 하므로 이스케이프 처리가 덜 필요합니다. (다른 문자는 #(나중에 더 자세히 설명 )과 같이 해당 기능을 대체 할 수 있습니다 . \`백틱 \\을 이스케이프하고 백 슬래시를 이스케이프하고 다른 이스케이프 시퀀스가 ​​없습니다. 줄 바꿈이 필요한 경우 문자열에 실제 리터럴 줄 바꿈을 붙이십시오.
  • RationalGolfScript의 주요 결함 중 하나 인 임의의 정밀 부동 소수점에 Ruby를 사용 합니다.
  • 유형을 다른 유형으로 변환하는 기능 예를 들어 블록을 문자열로 변환 할 수 있습니다.
  • 정규식. 로 만들었을 것입니다 "...". 연산자도 오버로드됩니다. 예를 들면 다음과 같습니다 "\W"~{`Invalid: non-word character`}{`OK`}if. 블록과 같은 변수에서 푸시하면 자동으로 실행됩니다.
  • GolfScript에서는 불가능했던 더 많은 작업을 수행하기위한 File 및 Date 개체. 이것에는 리터럴이 없지만 `file.txt`fl(파일 작성 기능의 이름이 변경 될 수 있음) 과 같이 문자를 초기화하는 기능이 있습니다.
  • 어쩌면 해시지만 확실하지 않습니다. 내가해야합니까?
  • 도우미 기능은 더 많은 기능을 수행합니다. 예를 들어, `http://example.com`net네트워크 액세스의 경우 (다시 net운영자 이름이 변경 될 수 있음). rb문자열을 Ruby 코드로 실행합니다. 더 많은 것들이있을 것입니다. 제안을 환영합니다.
  • 의견이 없으므로 #다른 용도로 사용할 수 있습니다. 당신이 의견을 원한다면 `comment here`;잘 작동합니다. ( 의 기능을 #대체 할 수 있음 `)
  • 함수를 추가하기가 훨씬 쉬운 방식으로 완전히 다시 작성됩니다. 기본적으로 코드는 더 읽기 쉽습니다. (GolfScript 소스를 보셨습니까? :/)
  • Github에있을 것이므로 협업 적으로 작업 할 수 있습니다. MIT 또는 그 아래에 라이센스를 부여합니다.
  • 마지막 줄 바꿈이 없으므로 cheaty quines 작업 : P

그리고 나는 그것들이 가장 과감하고 유용한 변화라고 생각하기 때문에 이것을 구별하고 있습니다 (부동 소수점 추가 제외).

  • 많은 Ruby 함수가 내장되어 있습니다. 예를 들어 shuffle(약칭 할 수 있음 sf) (이전에 9 자 사용 ), tr(이전 14 자 ), sample( sm, 이전 .,rand=), flatten( fl, 이전 ???) 등
  • Rebmu처럼 숨겨 질 것입니다. 예를 들어, 이제 정렬 기능을 덮어 쓰는 ~:a0<{0a-}aIF대신 ~:$0<{0$-}$if( 문자 변수 이름을 사용하여) 수행 할 수 있습니다 . ( 여기에서 예 ). 이 방법은 대소 문자를 구분하지 않으며 변수 이름에는 숫자를 사용할 수 없습니다. 골프 언어이기 때문에 이것은 내 의견으로는 괜찮습니다. : P
  • 디버깅이 필요합니다. 배열 구분 기호, 요소 구분 기호 등을 지정하는 플래그, 숫자 출력 (합리적, 부동 또는 int?)을 지정하고 한 번에 하나씩 명령을 단계별로 실행하고 프로그램을 실행하는 대신 각 토큰을 토큰 화하고 출력하는 기능을 추가합니다. 기타

그래서 내 질문은 : 개선해야 할 것이 무엇입니까? 무엇을 추가해야한다고 생각하십니까?

코딩을 시작하기 전에 다른 아이디어가 있습니까?


어렴풋을 추가하면 대 / 소문자를 구분하지 않습니다.
marinus

@ marinus 나는 그것을 알고 있습니다. 나는 그것을 분명히 했어야했다. 편집 ...
도어 노브

또한 실제로 필요한 것은 대화식 프로그램의 경우 명시 적 I / O를 수행하는 방법입니다. 인터프리터는 프로그램이 명시 적 I / O를 사용하는지 미리 확인할 수 있고 그렇지 않은 경우에만 내재적 I / O를 수행합니다.
marinus

@ marinus 위대한, 당신은 대답으로 다음과 같이 추가해야합니다 :)
Doorknob

1
@Claudiu 새로운 언어에 대한 나의 개발은 꽤 활발하지만 최근에는 꽤 바빴 기 때문에 한동안은 그다지 많이하지 않았습니다. 이 아이디어 중 일부는 좋은 아이디어가 아니지만 내가 사용하지 않는 아이디어는 다음과 같습니다 .P
Doorknob

답변:


17

유연한 I / O

현재 골프 스크립트를 대화식 프로그램에 사용할 수 없습니다. 명시 적 입력을위한 몇 가지 기능 (예 readline: getchar및 친구)을 추가 할 것을 제안 합니다. 인터프리터는 프로그램을 실행하기 전에 프로그램에서이를 사용하는지 확인해야합니다.

프로그램이 입력 기능을 호출하지 않으면 인터프리터는 일반적으로 Golfscript처럼 작동해야합니다.

인터프리터가 런타임에 생성 된 평가 코드에서 입력 함수를 감지하지 않을 것으로 예상되지만 어떻게 든 그렇게 할 수 있다면 kudos입니다.


이것은 좋은 생각입니다. 제한된 io는 golfscript의 큰 제한 중 하나입니다. +1
Doorknob

11

더 짧은 내장

기본 제공 명령이없는 모든 내장 명령의 단일 문자 별명 base그냥 있다면 더 많이 사용할 것 B입니다.


그러나 b변수 이름으로 사용한다면 어떨까요? 아직도; 좋은 생각; 함수를 사용하려는 경우 해당 이름을 사용하지 말고 함수를 사용하지 않으면 전혀 영향을 미치지 않습니다.
Doorknob

@DoorknobofSnow, 당신은 이미 내장 된 기능을 사용할 수 있습니다 (심지어 같은 토큰 ^또는 $) 변수 이름으로. 그 문제를 더 나쁘게 만들지는 않습니다. 또한 이전 버전과의 호환성을 허용하기 위해 별칭을 제안 했으므로 더 짧은 별칭에 다른 것을 할당하려면 더 긴 이름을 사용해야합니다.
Peter Taylor

4
Zzip매우 유용 할 것이다.
Howard

GolfScript 의 공식 표준 라이브러리를 출시 할 수 있습니다 . 그러나 솔루션에 어떻게 포함될 수 있는지 확실하지 않습니다 (누락 #include되고 "#{IO.read'lib'}"~너무 깁니다).
Howard

@Howard 이제 아이디어입니다 ... 나는 언어에 라이브러리를 추가 할 수 있습니다 mylang -Llibname somefile.ext.
손잡이

9

결합 된 div-mod

이것은 일부 제안보다 약간 틈새이지만 숫자 이론적 인 프로그램에서 작업 할 때 종종 두 개의 정수 ab가져 와서 스택에서 푸시 a/b하고 푸시 하는 연산을 원합니다 a%b. (현재는입니다 1$1$/@@%).


틈새 시장이기 때문에 dvmDiV-Mod 와 같은 것일 수 있습니다. 모든 아이디어를 주셔서 감사합니다 :-) +1
Doorknob

8

번호

선행 0이 숫자의 일부가 아닌 렉서를 변경하십시오.

# current behaviour
01     # -> 1

# new
01     # -> 0 1

또한 음수를 _대신 써야 합니다.

# current behaviour
1 2-3   # -> -1 3

# new
1 2_3     # -> 1 2 -3

와우, 흥미 롭습니다. 일반적으로 일반적으로 두 개의 숫자를 연속으로 밀어 넣지는 않지만 많은 도움이됩니다. 부정적인 것은 대신, 너무 큰 0 100-부정적인 (100)에 대한 한
손잡이

1
나는 이것에 대해 전에 생각했다. 음의 정수 리터럴을 전혀 지원하지 않아야합니다. 이미에 의해 처리되었습니다 ~. 예를 들어 -1은 0~입니다. 이렇게하면 적은 수의 숫자가 한 문자 씩 길어 지지만 이후에 공백이 약간 자주 필요하지 않습니다 -.
피터 테일러

잠시만 요, 예를 들어 1001을 어떻게 누르시겠습니까? 나는 당신이 후행이 아닌 제로를 의미한다고 생각합니다.
Doorknob

@DoorknobofSnow 맞습니다.
Howard

당신이 {0\-}:~;( ~음수를 숫자 화)하고 not비트 단위로 사용하는 것에 대해 어떻게 생각 and or xor하십니까?
Doorknob

8

전체 스택에 액세스

GolfScript는 스택 기반 언어이지만 스택에서 최상위 3 개 항목을 제외한 모든 항목에 대한 액세스 <integer>$는 n 번째 항목을 복사하는 것으로 제한됩니다 . roll3 개 이상의 "라이브"변수로 작업하기 쉽도록 PostScript의 명령 과 같은 것을 사용하는 것이 유용 합니다.

이상적으로는 하나의 인수와 두 개의 인수 버전이 있지만 이름이 충분하지 않으면 하나의 인수가 한 문자의 선호도를 가져와야합니다.

하나의 인수는 롤링 할 항목 수를 취합니다. 예를 들어 1 roll아무것도하지 않습니다. 2 roll동등하다 \; 3 roll동등하다 @; 4 roll숫자가 높을수록 기존에 해당하는 것이 없습니다. 가능한 가장 가까운 것은

]-4/()\+\+[]*-1%~

(그리고 스택의 특정 위치 또는 active에서 정수가 아닌 것을 처리하지 않으며 [루프 내부도 거의 중단됩니다).

2 중 하나는 롤링하는 데 걸리는 양도 있습니다. a b roll2와 같습니다 {a roll}b*.


그래서 루비처럼 rotate. CW 답변으로 이것을 편집해야합니다.
손잡이

@ 문 손잡이. 어레이가 아닌 스택 슬라이스에서 작동하는 것에 대해 이야기하고 있습니다.
피터 테일러

음 ... 무슨 뜻인지 모르겠습니다. 포스트 스크립트에 익숙하지 않지만 roll배열을 회전시킵니다.
Doorknob

@DoorknobofSnow, 스택 . 배열은 스택에있는 항목입니다.
피터 테일러

아, 그래서 그것은 전체 스택을 회전 시킵니다 . 아, 그것은 유용 할 것입니다! +1
Doorknob

8

CJam

나는 "개선 GolfScript"을 구현하며 CJam라고 - http://sf.net/p/cjam을
대부분의 기능은 여기서 논의 많은하지 않을 경우 이미이 두 번째 릴리스 (버전 0.6) 지금. 나는 그들을 나열하려고합니다 :

  • 여전히 루비로 작성-nope, java
  • 사용하여 `문자열 구분 기호로 - 아니,하지만 최소한의 이스케이프와 큰 따옴표 문자열을 사용 ( \기약 만 \하고 ")
  • 부동 소수점-지원되지만 임의의 정밀도가 아닌 표준 "double"만
  • 유형을 다른 유형으로 변환-예
  • 정규식-아직은 아니지만 계획된; 특수 연산자와 함께 일반 문자열을 사용합니다
  • 파일 및 날짜 개체-아니요, 현재 날짜 / 시간을 가져올 수 있음
  • 해시-파이썬 dicts 또는 Java 맵과 같다고 가정하면 지원되지 않습니다 (향후 고려할 수 있음)
  • 더 많은 일을하는 도우미 기능-예, 많이
  • `http://example.com`net - "example.com"g
  • 문자열을 루비 코드로 실행-nope
  • 의견이 없습니다. 정확히 #다른 용도로 사용됩니다."comments like this";
  • 기능을 쉽게 추가 할 수 있습니다-그렇게 생각하지만 편견이 있습니다. :)
  • Github에서-더 나은 (내 의견으로는 촬영하지 마십시오)-SourceForge에서 hg 사용
  • MIT에 따라 라이센스가 부여됨-예
  • 마지막 줄 바꿈 없음-오른쪽
  • 셔플- mr
  • tr- er
  • 샘플-완료되지 않음 _,mr=
  • 평평-완료되지 않았지만 달성하기가 더 쉬움
  • 으깬-아니,하지만 식별자를 분리 할 필요가 없습니다
  • 디버깅-스택 추적 및 ed스택 표시를위한 연산자

  • 유연한 I / O-예, 명시 적 입력

  • 더 짧은 내장-예, b= 기본, z= zip
  • 선행 0-아니요, 사전 정의 된 변수를 사용할 수 있음
  • 명확하다 --그렇다 _. 1 2-3-> 1 2 -3; 1 2m3->-1 3
  • 스택 롤 / 회전-아니오
  • 배열 세트- t
  • divmod- md
  • 어휘 분석기 변경 (식별자 용)-예, 아래 참조
  • 직교 곱-정확히 같지는 않지만 그렇습니다. m*
  • 유니 코드 연산자-아니오
  • 단일 문자 식별자-사전 정의 된 연산자는 1 또는 2 개의 문자를 가지며 변수는 단일 문자 대문자입니다. 그것들은 렉서 / 파서를 혼동하지 않고 모두 연결할 수 있습니다
  • 블록의 연산자-아니오
  • 안정적인 정렬-예
  • 기호를 다시 코드 블록으로 변환-아니요, 나중에 추가 할 수 있음
  • 현재 날짜 / 시간- et
  • 명령 줄 인수- ea
  • 내장을 명확하게 분리-예, 그러나 자본은 변수입니다. 내장은 소문자 및 특수 문자로 시작하거나 소문자로 시작합니다
  • 최소 및 최대-예, 현재 2 개의 값에 대해서만 : e<,e>
  • 절대 값- z(GolfScript에는 abs부족하지 않음)
  • 배열의 합과 곱- :+,:*
  • 맨해튼 거리-아니오
  • chr- c(문자열이 아닌 문자로 변환)
  • CJam 문자열은 숫자가 아닌 문자로 구성됩니다. 여전히 캐릭터를 흘리기 위해{}/
  • 그 버전 :은 저장된 것을 소비합니다-nope
  • 사업자 >=, <=- 아니, 사용 <!,>!
  • base64 및 zlib-아니요
  • 1 $, 2 $, 3 $, 4 $, 5 $에 대한 단축키-nope
  • 계획된 상위 2 개의 스택 항목을 복사합니다. 지금 사용1$1$
  • 지역 변수-nope
  • HQ9 + 기능-아니요, 감사합니다

CJam에는 더 많은 기능이 있습니다. https://sourceforge.net/p/cjam/wiki/Operators/를 확인 하십시오.


7
SourceForge와 Mercurial이 GitHub보다 나은 것에 동의하지 않습니다.
nyuszika7h

1
@ nyuszika7h 괜찮습니다. 우리 모두 선호합니다
SE는 EVIL이기 때문에 aditsu는 종료

내 GolfScript 답변에 적절한 sqrt 함수가 절실히 필요했기 때문에 첫 번째 CJam 답변을 게시했습니다 . CJam은 GolfScript보다 훨씬 빠릅니다!
Dennis


@aditsu CJam을 GolfScript의 방언 또는 GolfScript에서 영감을 얻은 새로운 언어로 생각하십니까? (여기에 내가 부탁 해요 이유입니다 : codegolf.stackexchange.com/questions/37464/... )
마틴 청산

6

어휘 분석기 변경

GolfScript의 어휘 분석기는 루비 식별자 (정규식과 일치하는 것 [_a-zA-Z][_a-zA-Z0-9]*)를 단일 토큰으로 취급합니다. 대신 빌트인이 될 수 있고 공백을 분리하지 않고 알파 변수 뒤에 리터럴 정수 [a-zA-Z]+가 올 수있는 토큰으로 처리 된 경우 _.


글쎄, 현재 나는 [a-z]+|[A-Z]+mushing에 간단히을 사용하고 있으므로 밑줄은 무료입니다. 이것은 흥미롭고 매우 독특한 아이디어입니다! +1
도어 노브

5

유니 코드 별칭

여러 문자 명령에는 유니 코드 별칭이있을 수 있습니다. 이것은 점수가 바이트가 아닌 문자로 계산 될 때 점수를 저장합니다.


7
어 ... 우리는 또 다른 APL ... 싶지 않아
존 드보락

1
Golfscript는 APL, Unicode 또는 no와 같은 것이 아닙니다. 우리는 이미 J와 K. (또는 R이 자주 직역을 할 수 있다는 점에 매우 APL-영감을 나에게 보이는)과 같은 여러 가지 다른 APLs에,이
스 marinus

APL의 차이점은 기본적으로 벡터 산술을 사용하는 것이 아니라 다른 것과 매우 다른 문자 집합을 사용한다는 것입니다. 나는 J를 좋아하고 그것을 사용하며 일반적으로 J 답변을 찬성합니다. 아직 한 가지 APL 답변을 지지하지 않았습니다 . 프로그램을 작성하는 대신 그림을 그리려면 Piet을 사용합니다.
John Dvorak

나는 APL이 J보다 더 읽기 쉽고 Golfscript보다 더 읽기 쉽다고 생각합니다.
marinus

5

안정적인 정렬

$블록에 내장 안정적인 정렬을 수행해야합니다.


5

배열 집합 연산자

["A" "B" "C" "D" "E" "F"] -1 4 S    # -> ["A" "B" "C" "D" -1 "F"]

모든 내장 기능을 사용할 수 있습니까?


+1 배열 세트 구현에 대한 블로그 게시물을 작성하기 시작했지만 완료하지는 않았습니다. 현재 전체적으로 매우 어려운 상황입니다. 이것은 일부 도전 과제에 큰 차이를 만들 것입니다.
피터 테일러

나는 이것이 이미 골프 스크립트에 내장되어 있지 않다는 것을 믿을 수 없습니다. +1
Doorknob

5

단일 문자 식별자

코드 골프 솔루션이 너무 많은 변수를 갖는 것과는 다릅니다. 그리고 그것은 공간을 절약 할 것입니다.


흠 .. 파서를 변경하여 수행 할 수도 있습니다. 이 동작을 지정하는 플래그일까요? 좋은 생각이야! +1
Doorknob

4

제품에 내장 된 %

[1 2][1 2 3]%  # -> [[[1 1][1 2][1 3]][[2 1][2 2][2 3]]]

+1; 당신은 내 CW 답변을 편집하고 이것을 추가 할 수 있습니다
Doorknob

모듈로는 어떻습니까?
MilkyWay90

3

정규식 지원

정규식 지원의 부족은 골프를 위해 설계된 언어에서 항상 이상하게 생각했습니다. 갖는 것이 좋을 것입니다

  • <string> <string> <string> y(일명 tr, Perl의 단일 문자 별칭 사용)
  • <string> <string> <string> s (대용품)
  • <string> <string> <block> s (콜백으로 대체)
  • <string> <string> m (시합)

나는 이미 내 질문에 정규식을 언급했다.
Doorknob


3

내장 된 |, & 및 ^ 내장 블록에서 유용한 기능을 수행하십시오.

<array/string> <block> |를 들어 인덱스 기능으로 사용할 수 있습니다

[0 -10 -20 30 40 -50 60] {0<} |   # -> [1 2 5]

에 대한 어떤 아이디어 <array/string> <block> &<array/string> <block> ^?


무엇을 않는 array block =지금?
John Dvorak

@JanDvorak 비교. 문자열을 블록과 비교하려는 경우에 유용합니다 (예 :) "0<" {0<} =.
Howard

얼마나 자주 필요합니까? 차라리 포기하고 array block ="조건 자에 의해 선택"
John Dvorak

술어에 의한 @JanDvorak select는 이미를 사용하여 구현되었습니다 ,.
Howard

오, 신경 쓰지 마 계속 :-)
John Dvorak

2

심볼을 다시 코드 블록으로 바꾸는 방법

현재 코드 블록을로 심볼에 바인딩 할 수 :있지만 프로세스를 되돌릴 방법은 없습니다. 코드 블록에 바인딩 된 심볼을 실행하면 블록 만 실행됩니다.

이것을 구현하는 몇 가지 방법을 볼 수 있습니다.

  1. 코드 블록 인 경우에도 스택에 #foo값을 푸시하기위한 새로운 구문 추가foo

  2. 연산자를 추가하여 코드 블록의 모든 기호 를 확장 하여 ( _새 연산자로 사용) 예를 들어 {2*}:dbl; {dbl dbl}_생성하십시오 {2* 2*}.

두 방법 모두 장점을 볼 수 있습니다. 후자는 (두 개의 추가 문자의 비용으로 이전을 대체 할 수있는 {foo}_대신 #foo(사용 예),하지만 난 그 두 문자가 금지 될 것 이전 구문에 대한 몇 가지 잠재적 인 응용 프로그램을 볼 수 있습니다 array #func %대신 array {func} %).

한편, 코드 블록의 토큰을 어떻게 든 반복 할 수있는 편리한 방법이 있다면 전자의 구문을 사용하여 후자를 대체 할 수 있습니다 (어쨌든 유용 할 수 있음).


어느 쪽이든 네이티브 내장 (예 : Ruby 코드로 구현)에 바인딩 된 확장 기호는 내장 기능을 얻기 위해 호출 할 수있는 일종의 스텁을 반환해야하지만 불가능하지는 않습니다. 또는 재정의 될 가능성이 거의 없습니다. 예를 들어, #$(나 {$}_) 예를 들어, 반환 할 수 {builtin_dollar}builtin_dollar의 실제 구현을 포함 할 것이다 $내장 (과 #builtin_dollar또는 {builtin_dollar}_단지 반환해야합니다 {builtin_dollar}자체).

이를 통해 내장 기능을 기능에 대한 액세스 권한을 잃지 않고 다시 정의 할 수 있으므로 ( 이전 제안 참조 ) 어떤 이유로 든 $및 의 의미를 바꾸고 싶을 때 @, 나는 단지 #$ #@ :$; :@;(또는 {$}_ {@}_ :$; :@;) 할 수 있습니다 .


확실하지 않은 한 가지 세부 사항 _은 코드 블록에 변수 할당이 포함 된 경우 연산자가 수행해야 할 작업입니다. 명백한 것은 :symbol토큰을 그대로 두고 다른 것을 확장하는 것이지만 _로컬 변수를 사용하여 코드를 손상 시킬 수 있습니다 . 이 제작 되지 하지만, 이러한 코드는 비실용적 복잡 할 수도 휴식.
Ilmari Karonen

1
두 번째 버전은 배열에서 flatten 연산자와 함께 사용할 수 [[1] [2] [3]] _ -> [1 2 3]있습니다.
Howard

결과는 2:A;{1:A;A}_어떻습니까?
Howard

순진하게 {1:A;2}(또는 {1:A builtin_semicolon 2}내장 확장 기능이 포함 된 경우 기술적으로 ). 어떤 종류의 "로컬 변수 제외"기능이 포함되어 있다면, 그저 그럴듯하게 평가 될 수 있습니다 {1:A;A}.
Ilmari Karonen

또는 더 기술적 인 것 {builtin_1 :A builtin_semicolon 2}.
Howard

1

명령 줄 인수가있는 변수 사전 설정

불행히도, 할당되지 않은 숯은 없지만, 우리는 그것을 A위해 사용할 수 있습니까?


_사용할 수 있습니다. 아마도? 어쨌든, 그래, golfscript는 cmd를 라인 인수 +1 복용하는 방법이 필요
손잡이

0

구현해야 할 기본 Ruby 함수

이것은 커뮤니티 위키입니다. 구현해야한다고 생각하는 기능을 자유롭게 편집하고 추가하십시오!

형식 : " nativeFunctionName( nameInMyLanguage)"

  • shuffle( sf)
  • tr( tr)
  • sample( sm)

0

APL 및 HQ9 +의 기능도 활용하십시오!

  • APL과 같은 단축키. 편집 : 방금 "유니 코드 별칭"을 보았습니다. 그게 내가 의미 한 바 :)
  • H9 +, HQ9 +, CHIQRSX9 +와 같은 다른 골프 지향 단축키

그래, 어떻게 제안 하겠어? 구체적인 아이디어가 있습니까?
Doorknob

하나의 문자로 복잡한 작업을 수행 할 수있는 유니 코드 문자
xem

눈의 @Doorknob, 나는 내가보고 싶은 바로 가기 내 대답을 업데이 트 : APL에서 사람들을, 그리고 CHIRQSX9에서 그 + :
XEM

흠의 HQ9의 + 것은 너무 cheaty - P 보인다
손잡이

골프 지향 : P 내 의견으로는 당신의 언어는 최소한 다음과 같이해야합니다 :)
xem

0

내장 기능을 명확하게 분리

예 : 수도 : 내장; 기초를위한 B를 실현 가능하게 만들기


1
위에서 언급했듯이 분리 할 필요가 없습니다. 누군가가 내장을 덮어 쓰는 것을 좋아한다면 그렇게 할 수 있어야합니다. 심지어 연산자를 덮어 쓰는 유용한 응용 프로그램을 찾았습니다 {-}:+.
Howard

필요하지 않으며이 언어는 대소 문자를 구분하지 않습니다.
Doorknob

2
목표는 홀당 더 적은 스트로크를 제공하는 것이므로 대소 문자를 구분하고 내장 기능을보다 효과적으로 사용하면 미션 선언문을 효과적으로 이끌어 낼 수 있습니다.

0

지역 변수 / 클로저

내가 GolfScript에서 정말로 놓친 한 가지는 심볼의 값일시적으로 변경하는 기능 입니다.

특히, "기본적"내장의 의미를 일시적으로 무시할 수있는 방법 $은 없습니다. 다시 정의 하면 다시 정의 할 수 없습니다. 예를 들어, 이 코드 블록에서 $ 다른 것을 의미하지만 여전히 다른 의미를 유지 한다고 말할 수 있다면 정말 좋을 것입니다.

위와 관련하여 코드 블록의 기호를 현재 값바인딩하는 것이 좋습니다 . 물론, 내가 말, 쓰기, 수 {$-1%}:rsort및 사용할 수 rsort정렬하고 배열을 반대하는 것이 아니라 그 작품 의 정의만큼 $(또는 -1%)하지 않습니다 변화, 내 이후 rsort기능은 여전히 글로벌 기호를 부르고있다 $. " 심볼이 나중에 재정의 되더라도 현재 rsort하는 일을 하자"라고 말할 수 있다면 좋을 것 $-1%입니다.

특히 표준 라이브러리 는 이러한 종류의 바인딩을 사용할 수 있습니다. 예를 들어 n변화가 행동의 변화 puts를 일으키거나 재정의가 !완전히 망가진다 는 것을 깨닫는 것은 놀라운 일 xor입니다. (여기서, 특히 동작 버전을 변경하는 기능 이 현재 버전의 GS에서 최종 개행 문자인쇄하지 않는 유일한 방법puts 으로 판명 되기 때문에 여기서 다시 한 번주의를 기울여야합니다 .)

편집 : 심볼을 코드 블록으로 되돌릴 수 있으면 이 기능을 구현하는 데 많은 도움이됩니다. 특히이 {foo}_답변에서 제안 된 구문은 코드 블록의 모든 심볼을 확장하여 한 수준의 정적 바인딩을 효과적으로 수행합니다. 와 그 결합 fixpoint의 콤비 깊은 정적에 대한 바인딩, 그리고 밥 삼촌의 ...


어서-모든 새롭고 멋진 언어는 게으른 평가를 축하합니다 ;-) GolfScript에서 그 기능을 유지합시다.
Howard

다시 생각하면-당신 말이 맞습니다. 그것은 평가보다 구속력이 있습니다. 그러나 정적 바인딩은 소리보다 복잡합니다. 예를 들어 정의 내에 재귀 호출을 제공하십시오.
Howard

" 그 심볼들이 나중에 재정의 되더라도 현재 rsort무엇을 $-1%합니까"So Emmental?
CalculatorFeline

0

더 내장 된 기능

모든 단일 문자 변수 az 및 AZ가 일반적이고 유용한 기능을 수행하도록합니다. 부족한 일부 내장 기능 :

  • 최소 및 최대 : 전체 또는 일부 상위 2 개 스택 값, 상위 n 개 스택 값
  • 절대 값
  • 배열의 합과 곱. 왜 {+}*할 수 S있을까요? 여기에는 52 가지 기능이 있습니다!
  • 맨해튼 거리 (즉, x1 y1 x2 y2 --> abs(x2-x1)+abs(y2-y1)이제 내장 된 절대 값 @-A@@-A+이면 되어야 A합니다. 이것이 가장 최근 게시물의 단서가 되었음에도 불구하고 항상 골프 스크립트를 확장하는 좋은 방법이라고 생각했습니다. 함수를 가지고 수집하고 내장 함수로 추가하는 것이 편리합니다.
  • 정수를 1 문자열 (python 's와 동일 chr)로 변환하십시오.
  • 스택에 현을 흘리십시오 (현재 {}/)
  • 그 버전 :은 저장된 것을 소비합니다. 이것은 유용한 식별자에 '고착'될 필요가 없습니다.
  • 사업자 >=,<=
  • 누군가가 제안했듯이 블록을 포함하는 변수를 스택에 넣지 않고 스택에 넣는 방법. 따라서 양식의 경우 1{\}{|}if를 다음과 같이 줄일 수 있습니다.1?\?|if
  • 내장 된 base64 변환 및 zlib 지원으로 임베드 데이터의 문자 수 감소
  • base64 외에도 문자열 구분 기호가 아닌 인쇄 가능한 모든 문자를 사용하여 사용자 정의 base93 인코딩을 작성하십시오.
  • 바로 가기에 대한 1$, 2$, 3$, 4$,5$
  • 상위 2 개의 스택 항목을 그대로 복사하는 연산자 \.@.@\

-3

함수의 마지막 줄에서 쓰거나 계산 한 값이 자동으로 반환되면 좋을 것입니다


3
스택 기반이므로 ...
marinus

1
함수와 같은 것은 없습니다.
Peter Taylor

함수는 아무것도 반환하지 않습니다 ... 그리고 그것들을 블록이라고 부릅니다
Doorknob

다른 언어로는 좋을 수도 있습니다. (함수의 말에 더 이상 성가신 반환 문 야호 (하지만 반환 문 적, 그래서 ...) 필요하지 않은!)
CalculatorFeline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.