Julia: 사용자 지정 쀑위 연산자

에 만든 2016년 06월 17음  Â·  65윔멘튞  Â·  출처: JuliaLang/julia

https://groups.google.com/forum/#!topic/julia -dev/FmvQ3Fj0hHs에서 맞춀 쀑위 연산자 구묞 생성에 대한 토론읎 있습니닀.

...

메몚륌 추가하Ʞ 위핎 펞집됚: @johnmyleswhite 는 아래의 댓Ꞁ 슀레드가 자전거 읎동에 대한 쎈대임을 지적했습니닀. 추가할 정말 새로욎 것읎 없는 한 새로욎 댓Ꞁ은 삌가핎 죌십시였. "만섞" 읎몚티윘(폭발하는 원뿔형)윌로 표시된 몇 가지 제안읎 아래에 있습니닀. 읎 아읎윘을 사용하여 토론을 걎너뛰고 제안을 읜거나 "좋아요" 또는 "ì‹«ì–Žìš”"에 투표할 수 있도록 닀륞 제안을 찟을 수 있습니닀.

읎 버귞에 대한 찬성/반대 투표는 Julia가 사용자 지정 쀑위 ꎀ용구륌 가젞알 한닀고 생각하는지 여부에 ꎀ한 것입니닀. 아래의 특정 아읎디얎에 대한 찬성/반대 투표는 @Glen-O의 첫 번짞 의견에 있얎알 합니닀. (버귞가 명확핎지Ʞ 전에 3개의 반대와 1개의 찬성읎 있었습니닀.)

...

쎈Ʞ 제안(역사적 ꎀ심만 핎당):

성공한 것윌로 볎읎는 제안은 닀음곌 같습니닀.

    a |>op<| b #evaluates (in the short term) and parses (in the long term) to `op(a,b)`

읎 작업을 수행하렀멎 앜간의 변겜만 필요합니닀.

  • <| 의 우선 순위륌 동음하지 않고 |> 의 우선 순위 위에 두십시였.
  • <| 귞룹을 왌쪜에서 였륞쪜윌로 만듭니닀.
  • <|(a,b...)=(i...)->a(i...,b...) 핚수륌 만듭니닀. (토론 슀레드에서 지적했듯읎 읎것은 위의 ꎀ용구에서의 사용뿐만 아니띌 독늜 싀행형 용도도 있습니닀)

선택 곌목:

  • 적절한 우선 순위 및 귞룹화륌 사용하여 새 핚수 >|(a...,b)=(i...)->b(a...,i...) 및 |<(a,b...)=a(b...) 을 만듭니닀.

    • Pipe first는 평가륌 의믞하고 pipe last는 읎륌 핚수로 유지하는 반멎 > 및 <는 얎느 것읎 핚수읞지륌 나타냅니닀.

  • 적절한 우선 순위 및 귞룹화륌 사용하여 새 핚수 >>|(a...,b)=(i...)->b(i...,a...) 및 <<|(a,b...)=(i...)->a(b...,i...) 을 만듭니닀.
  • |>에 대한 동의얎 » , ⁍ 및(또는) pipe |> 생성 ; « , ⁌ 및(또는) rcurry for <| ; 및(또는) lcurry for <<| ; 쀑위 연산자로 작동하는 닚음 묞자 동의얎.
  • 아래의 첫 번짞 파서 수정을 수행하는 @infix 맀크로륌 base에 만듭니닀.

장Ʞ간:

  • 파서가 a |>op<| b 을 op(a,b) 로 변겜하도록 가륎쳐 윔드륌 싀행할 때 추가 였버헀드가 발생하지 않고 연산자가 싀제로 쀑위 위치에 정의될 수 있습니닀. (읎는 파서가 현재 읎진 a:b 및 삌항 a:b:c 을 닀륎게 췚꞉하는 방식곌 유사합니닀. 최대 사용자 정의륌 위핎 음치하는 동의얎에 대핮 읎 작업을 수행핎알 하지만 음치하지 않는 동의얎에 대핎서는 읎 작업을 수행하지 않윌므로 예륌 듀얎 a |> b « c 는 여전히 두 개의 읎항 연산자로 췚꞉됩니닀.)
  • 파서가 쉌표 및/또는 공백을 읎핎하도록 가륎쳐서 위의 정의에 있는 타원읎 추가 ꎄ혞 없읎 예상대로 작동하도록 합니닀.

(https://github.com/JuliaLang/julia/issues/6946 ꎀ렚)

parser speculative

가장 유용한 댓Ꞁ

슀테판은 나볎닀 나읎가 많지 ì•Šë‹€.

몚든 65 댓Ꞁ

julia-dev 슀레드륌 반영하여 읎 제안에 대한 Stefan의 죌요 의견을 읞용하는 것읎 유용할 것읎띌고 생각합니닀.

여Ʞ에 Ʞ대치륌 섀정하Ʞ 위핎 Julia 1.0 읎전에는 "구묞 혁신"에 큰 지장읎 없을 것읎띌고 생각합니닀. (ë‚Žê°€ 생각할 수 있는 유음한 예왞는 새로욎 f.(v) 벡터화된 혞출 구묞입니닀.) 임의의 핚수가 쀑위 연산자처럌 작동하도록 하는 방법읎 있윌멎 좋겠지만 얞얎에서 시꞉한 묞제는 아닙니닀.

Julia 개발 역사의 상당 부분에 찞여했던 사람윌로서, 나는 통사론적 변화볎닀 의믞론적 변화에 에너지륌 집쀑하는 것읎 더 낫닀고 생각합니닀. Julia가 1.0에 도달하Ʞ 전에 í•Žê²°í•Žì•Œ 할 맀우 쀑요한 의믞론적 묞제가 많읎 ë‚šì•„ 있습니닀.

특히 읎 Ʞ능을 구현하는 것은 작성자만 생각할 필요가 있는 음회성 찚읎가 아니띌는 점에 유의하십시였. 몚든 사람은 앞윌로 자신의 작업읎 읎 Ʞ능곌 상혞 작용하는 방식에 대핮 생각핎알 하므로 변겜 사항은 싀제로 장Ʞ적윌로 파서에서 음하는 몚든 사람의 작업량.

나는 johnmyleswhite의 의견읎 제안된 "장Ʞ" 파서 변겜 사항곌 ꎀ렚하여 맀우 적절하닀고 생각합니닀. 귞러나 "사소한 변겜" 및 "선택적" 귞룹은 ë‚Žê°€ 볌 수 있는 한 ꜀ 독늜적읎고 영향읎 적습니닀.

슉: 읎 제안의 최소 버전을 활성화하는 데 필요한 파서 변겜은 음반 읎진 연산자에 대한 우선 순위 및 귞룹화, 닀륞 겜우에는 닀소 음상적읞 변겜 종류만 포핚합니닀. ꎀ렚 없는 작업을 하는 파서 개발자는 읎믞 졎재하는 수많은 연산자의 의믞륌 몚두 추적핎알 하는 것볎닀 더 읎상 읎륌 추적할 필요가 없습니닀.

개읞적윌로 읎 구묞은 맀우 볎Ʞ 흉하고 입력하Ʞ 얎렵습니닀. 귞러나 더 음반적읞 쀑위 구묞을 사용하는 것읎 좋닀는 데 동의합니닀.

읎에 대핮 생각하는 올바륞 방법은 구묞 전용 묞제띌고 생각합니닀. 원하는 것은 쀑위 구묞곌 핚께 op 륌 사용하는 것읎므로 읎륌 얻Ʞ 위핎 닀륞 핚수와 연산자륌 정의하는 것은 원형 교찚로입니닀. 슉, 몚든 것은 파서에서 수행되얎알 합니닀.

싀제로 읎것을 위핎 | 륌 회수하고 a |op| b 륌 사용하는 것을 고렀할 것입니닀. 틀늌없읎 음반적읞 쀑위얎 구묞읎 비튞 or볎닀 더 쀑요합니닀. (우늬는 읎전에 비튞 연산자륌 회수하는 것에 대핮 읎알Ʞ했습니닀. 귞것듀은 있는 귞대로 구묞 낭비처럌 볎입니닀.)

a f b 는 ë°°ì—Ž 연결 및 맀크로 혞출 구묞 왞부에서 사용할 수 있습니닀.

a f b 는 작동할 수 있지만 ꜀ 췚앜핎 볎입니닀. a^2 f b^2 f c^2 는 합법적읎지만 a f b c 및 a+2 f b+2 f c+2 $는 합법적읎지 않은 읎유륌 누군가에게 섀명하렀고 한닀고 상상핎 볎십시였. (마지막 것은 우선 순위가 prec-times띌고 가정하지만 우선 순위가 묎엇읎든 상ꎀ없읎 읎러한 음반적읞 종류의 묞제는 ꎀ심사입니닀.)

a |op| b 에 ꎀ핎서 : 처음에는 Google 귞룹 슀레드에서 볌 수 있듯읎 비슷한 제안읞 a %op% b 륌 선혞했습니닀. 귞러나 제안된 |> 및 <| 의 좋은 점은 각각 읎진 연산자로 개별적윌로 유용하고 원하는 대로 자연슀럜게 결합하여 작동한닀는 것입니닀(올바륞 우선 순위 및 귞룹화, 슉. ) 읎것은 Ʞ졎의 파서 메컀니슘을 사용하여 닚Ʞ적윌로 읎것을 구현할 수 있닀는 것을 의믞하며, 위의 johnmyleswhite에 대한 나의 응답에서 말했듯읎 믞래에 파서 개발자에게 곚칫거늬륌 만드는 것을 플할 수 있습니닀.

귞래서 저는 a |op| b 륌 좋아하고 확싀히 반대하지는 않겠지만, 필요한 파서 변겜을 닚순화하Ʞ 위핎 두 개의 닀륞 연산자륌 갖는 방법을 ì°Ÿì•„ì•Œ 한닀고 생각합니닀. 최대 타읎핑 가능성을 추구하고 | 가 "bitwise or"가 아닌 "pipe"륌 의믞하는 것을 반대하지 않는닀멎 a |op\\ b 또는 a |op& b 는 얎떻습니까?

"파서 개발자의 두통"은 가능한 가장 낮은 우렀입니닀.

"파서 개발자의 두통"은 가능한 가장 낮은 우렀입니닀.

파서 개발자로서 나는 읎것에 분명히 동의합니닀.

|> 및 <| 는 둘 ë‹€ 완벜하게 좋은 쀑위 연산자읎지만 두 개의 닀륞 연산자륌 사용하여 음반 연산자 구묞을 구현하는 데에는 아묎런 읎점읎 없습니닀. 귞늬고 ê·ž 구묞읎 얌마나 장황하고 맀력적읎지 않은지에 대핮 훚씬 더 말핎알 합니닀.

두 개의 닀륞 연산자륌 사용하여 음반 연산자 구묞을 구현하멎 아묎런 읎점읎 없습니닀.

분명히 하자멎, 장Ʞ 비전은 읎진 f <| y , 읎진 x |> f 및 삌항 x |> f <| z 가 있는 것입니닀. 여Ʞ서 첫 번짞는 핚수읎지만 두 번짞는 두 개는 파서에서 변환윌로 구현됩니닀.

|> 및 <| 두 가지 음반 핚수륌 사용하여 읎것읎 구현될 수 있닀는 아읎디얎는 ê·ž 비전에 대한 임시 닀늬음 뿐입니닀.

귞늬고 ê·ž 구묞읎 얌마나 장황하고 맀력적읎지 않은지에 대핮 훚씬 더 말핎알 합니닀.

귞것은 정당한 지적입니닀. |> 및 <| 륌 | 및 & 로 바꟞는 것은 얎떻습니까? 하킀 선수에게는 닀소 거슬늎 수 있지만 쌍윌로 또는 개별적윌로 몚두 의믞가 있습니닀.

읎륌 | 및 & 륌 몚두 훔치는 것은 ASCII의 좋은 할당읎 아니며 많은 사람듀읎 구분 Ʞ혞가 대칭읞 것을 선혞할 것읎띌고 생각합니닀.

사람듀읎 닀륞 읎유로 x |> f <| y 삌항 연산자륌 원하멎 ꎜ찮지만 별도로 고렀핎알 한닀고 생각합니닀. 파서가 |> 륌 뒀집힌 <| 로 변환핎알 하는지 잘 몚륎겠습니닀. < 와 같은 닀륞 유사한 연산자는 귞런 식윌로 작동하지 않습니닀. 하지만 귞것은 별개의 묞제읎Ʞ도 하닀.

둘 ë‹€ 훔치는 | 및 &는 ASCII의 좋은 할당읎 아니며 많은 사람듀읎 구분 Ʞ혞가 대칭읞 것을 선혞할 것읎띌고 생각합니닀.

확읞.

> 및 < 입력하Ʞ 얎렵닀는 것을 알고 있습니닀. 표쀀 킀볎드의 대칭성곌 타읎핑성 잡멎에서 가장 쉬욎 것은 &% 및 %& $ 와 같을 수 있지만 R 병렬읎든 아니든 심각하게 추악합니닀. /| 및 |/ 도 고렀할 가치가 있습니닀.

...

파서가 |>륌 뒀집힌 <|

잘못 읎핎하신 것 같아요. a |> b 는 b(a) 로 구묞 분석되얎알 합니닀. (특별한 구묞 분석읎 없는 버전은 ((x,y)->y(x))(a,b) 읎며 동음한 것윌로 평가되지만 더 많은 였버헀드가 있습니닀.)

a |> b는 b(a)로 구묞 분석핎알 합니닀.

아, 알겠습니닀.

나는 우늬가 몇 년 동안 ì–Žë–€ 캐늭터륌 사용할지에 대핮 자전거륌 탈 수 있닀고 생각합니닀. 나는 @StefanKarpinski (지ꞈ까지 읎 대화에서 가장 고위 읞사)가 결정을 낮멮 것읎띌고 신뢰하고 귞것에 대핮 ꎜ찮을 것입니닀. 귞것읎 ë‚Žê°€ 반대하는 것(예: a f b )음지띌도

닀음은 ì–Ží•„í•  수 있는 몇 가지 옵션입니닀.
a |>op<| b (현재 |> 변겜되지 않음)
a |{ op }| b (많은 음반적읞 킀볎드에서 가깝고 동음한 시프튞 상태, 너묎 추하지 않습니닀. 독늜 싀행형윌로 앜간 읎상합니닀.)
a \| op |\ b 또는 a /| op |/ b 또는 읎듀의 조합
a $% op %$ b (상대적윌로 타읎핑 가능, R에서 영감을 얻었지만 닀소 못생게습니닀.)
a |% op %| b
a |- op -| b
a |: op :| b
a | op \\ b
a | op ||| b
a op b

슀테판은 나볎닀 나읎가 많지 ì•Šë‹€.

읎 묞제에 대한 BDFL 권한윌로 자신을 지명한 것 같습니닀! ;)

a @op@ b ?

낮 투표는 \| , |\ , /| 및 |/ 쀑 4개륌 몚두 사용하는 것 같습니닀. 평가륌 위핎 아래로, 칎레륌 위핎 위로; Ʞ능쪜윌로 바. 귞래서:
a \| f (또는 f |/ a ) -> f(a)
a /| f (또는 f |\\ a ) -> (b...)->f(a,b...)
f |\ b (또는 b //| f ) -> (a...)->f(a...,b)
따띌서:
a \| f |\ b (또는 a /| f |/ b ) -> f(a,b)
a \| f |\ b |\ c (또는 a /| b /| f |/ c ) -> f(a,b,c)

|/ 륌 제왞한 4개의 죌요 연산자 각각은 ê·ž 자첎로 유용합니닀. 쀑복성은 확싀히 비파읎썬적읎지만 녌늬적 깔끔핚은 Julian읎띌고 생각합니닀. 귞늬고 싀용적읞 묞제로, 입력하Ʞ 더 쉬욎 쀑위 ꎀ용구 버전을 사용할 수 있습니닀. 둘 ë‹€ 똑같읎 읜을 수 있습니닀. 음닚 하나륌 ë°°ìš°ë©Ž 자연슀럜게 둘 ë‹€ 읎핎하게 됩니닀.

분명히 몚든 슬래시륌 바꿔서 위쪜 화삎표는 평가용읎고 아래쪜 화삎표는 컀링용윌로 바꟞멎 동음한 의믞가 됩니닀.

나는 여전히 On High의 소식을 Ʞ닀늬고 있습니닀. 귞러나 읎 자전거 볎ꎀ소볎닀 킀가 큰 사람읎 읎 버전읎나 최소 두 개의 새 Ʞ혞가 있는 닀륞 버전에 대핮 결정을 낎늬멎 ë‹šêž° 팚치(핚수 사용) 및/또는 적절한 팚치(변환 사용)륌 Ʞ꺌읎 작성하겠습니닀.

우늬는 가능한 한 BDFL을 사용하지 않윌렀고 녞력합니닀. :)

나는 닚지 몇 가지 ê°„ë‹ší•œ 사항을 Ʞ록할 것읎띌고 생각했습니닀.

첫짞, 제안되고 있는 표Ʞ법의 닀륞 읎점("독늜 싀행형 사용")은 <| 가 가독성을 향상시킀는 방식윌로 닀륞 컚텍슀튞에서 사용될 수 있닀는 것입니닀. 예륌 듀얎, A 묞자엎 배엎읎 있고 왌쪜에 있는 몚든 묞자엎을 10윌로 채우렀멎 지ꞈ 당장 map(i->lpad(i,10),A) 륌 작성핎알 합니닀. 읎것은 읜Ʞ가 상대적윌로 얎렵습니닀. 읎 표Ʞ법을 사용하멎 map(lpad<|10,A) 가 됩니닀.

둘짞, 읎 읎멎의 아읎디얎는 표Ʞ법을 음ꎀ되게 유지하는 것입니닀. 핚수 혞출의 "수정"을 접두얎에서 접믞사로 변겜하Ʞ 위핎 졎재하는 |> 연산자가 읎믞 있습니닀. 읎것은 닚지 표Ʞ법을 확장합니닀.

셋짞, 직접 쀑위얎륌 a f b 로 사용할 가능성읎 더 큰 묞제입니닀. a + b 및 a * b 는 ê²°êµ­ 동음한 우선 순위륌 가젞알 합니닀 + 및 * 는 핚수 읎늄읎고 시슀템에서 싀행 불가능하Ʞ 때묞입니닀. 가변 우선 순위륌 갖습니닀. 귞렇지 않윌멎 êž°ì¡Ž 쀑위 연산자륌 닀륎게 처늬핎알 하므로 혌동을 음윌킬 수 있습니닀.

예륌 듀얎 A 묞자엎 배엎읎 있고 왌쪜에 있는 몚든 묞자엎을 10윌로 채우렀멎 지ꞈ 당장 map(i->lpad(i,10),A) 륌 작성핎알 합니닀. 읎것은 읜Ʞ가 상대적윌로 얎렵습니닀. 읎 표Ʞ법을 사용하멎 map(lpad<|10,A) 가 됩니닀.

나는 닚혞하게 동의하지 않습니닀. 제안된 구묞은 – 싀례합니닀 – ASCII 샐러드로, 음반 독자에게 묎슚 음읎 음얎나고 있는지 닚서륌 제공하Ʞ 위핎 닀륞 얞얎에서는 전례가 없는 Perl 및 APL의 최악의 공격에 가깝습니닀. 현재 구묞은 몇 자 더 Ꞟ지만(5?), i->expr 가 람닀 구묞읎띌는 것을 아는 사람에게는 맀우 명확합니닀.

a + b와 a * b는 ê²°êµ­ 같은 우선 순위륌 가젞알 합니닀. +와 *는 핚수 읎늄읎고 시슀템읎 가변 우선 순위륌 갖는 것은 싀행 불가능하Ʞ 때묞입니닀. 귞렇지 않윌멎 êž°ì¡Ž 쀑위 연산자륌 닀륎게 처늬핎알 하므로 혌동을 음윌킬 수 있습니닀.

나는 읎것읎 진짜 묞제띌고 생각하지 않는닀. a f b infix의 우선 순위가 묎엇읞지 말하고 몚든 êž°ì¡Ž 우선 순위 수쀀도 유지할 수 있습니닀. 읎것은 우선 순위가 핚수의 읎늄에 의핎 결정되Ʞ 때묞에 작동합니닀. "+"띌는 핚수는 "+" 우선 순위륌 갖습니닀.

예, 읎믞 1+2 in 1+2 구묞에 대핮 읎 작업을 수행했윌며 묞제가 되지 않았습니닀.

나는 읎것읎 진짜 묞제띌고 생각하지 않는닀. afb infix의 우선 순위가 묎엇읞지 말하고 Ʞ졎의 몚든 우선 순위 수쀀도 유지할 수 있습니닀. 읎것은 우선 순위가 핚수의 읎늄에 의핎 결정되Ʞ 때묞에 작동합니닀. "+"띌는 핚수는 "+" 우선 순위륌 갖습니닀.

나는 귞것을 작동시킀Ʞ 위핎 파서륌 작성하는 것읎 얎렵닀는 것을 의믞하지 않았닀. 음ꎀ성 묞제로 읎얎지므로 "또는 êž°ì¡Ž 쀑위 연산자륌 닀륎게 처늬핎알 혌란을 음윌킬 수 있습니닀"띌고 말했습니닀. 묎엇볎닀도 Š 및 ∥ 는 개념상 크게 닀륎지 않지만 하나는 믞늬 정의된 쀑위 연산자읎고 닀륞 하나는 귞렇지 않습니닀.

나는 닚혞하게 동의하지 않습니닀. 제안된 구묞은 – 싀례합니닀 – ASCII 샐러드로, 음반 독자에게 묎슚 음읎 음얎나고 있는지 닚서륌 제공하Ʞ 위핎 닀륞 얞얎에서는 전례가 없는 Perl 및 APL의 최악의 공격에 가깝습니닀. 현재 구묞은 몇 자 더 Ꞟ지만(5?), i->expr읎 람닀 구묞읎띌는 것을 아는 사람읎띌멎 누구에게나 맀우 명확합니닀.

아마도 ë‚Žê°€ 말하는 것에 대핮 더 명확핎알 할 것입니닀. 작업을 "lpad by 10"윌로 섀명할 수 있닀는 것읎 i->lpad(i,10) 볎닀 훚씬 더 명확하닀는 것입니닀. 귞늬고 제 생각에는 lpad<|10 가 컚텍슀튞와 ꎀ렚읎 없는 형식윌로 얻을 수 있는 가장 가까욎 것입니닀.

ë‚Žê°€ 얎디에서 왔는지 섀명하멎 도움읎 될 것입니닀. 저는 수학자읎자 수학 묌늬학자입니닀. 묎엇볎닀도 "람닀 구묞"은 프로귞래밍 ꎀ점에서 합늬적읎지만 프로귞래밍 겜험읎 적은 사람듀에게는 가장 명확하지 않습니닀. Julia는 ë‚Žê°€ 읎핎하는 바와 같읎 죌로 곌학 컎퓚팅 ì–žì–Žê°€ 되는 것을 목표로 하므로 MATLAB곌 맀우 유사합니닀.

lpad<|10 x|>sin|>exp 더 "ASCII 샐러드"읞 읎유는 묎엇입니까? 귞러나 |> 표Ʞ법읎 추가되었습니닀. 예륌 듀얎, | 륌 사용하여 왌쪜에 있는 읞수륌 였륞쪜에 있는 명령윌로 전달하는 데 사용되는 bash 슀크늜팅곌 비교핎 볎십시였. "파읎프"띌는 것을 안닀멎 _앜간_ 더 읎핎가 되지만, 프로귞래밍에 능숙하지 않윌멎 말읎 안 됩니닀. 귞런 멎에서 |> 는 화삎표처럌 얎렎풋읎 볎읎Ʞ 때묞에 싀제로 더 의믞가 있습니닀. 귞늬고 <| 는 표Ʞ법에 대한 자연슀러욎 확장입니닀.

%func% 와 같은 닀륞 제안곌 비교하십시였. 닀륞 얞얎에서는 _전례가 있지만 ì–žì–Ž 프로귞래밍에 대한 ꎑ범위한 지식읎 없는 사람듀에게는 완전히 불투명합니닀.

ì°žê³ ë¡œ, 저는 더 였래된 토론 쀑 하나륌 닀시 삎펎볎았고, 읎론적윌로 ꜀ 좋은 닀륞 얞얎에서 사용된 표Ʞ법읎 있닀는 것을 알았습니닀. Haskell은 $#$ b(a,c,d) a |> b c d 륌 사용합니닀. 핚수 읎늄 뒀에 공백읎 있윌멎 읎러한 방식윌로 "맀개변수"륌 지정할 수 있습니닀. map(lpad 10,A) . 당항 연산자에서 유음한 묞제가 발생합니닀. 예륌 듀얎 i->+(i,10) 대신 "+10"에서 핎석하Ʞ 때묞에 map(+ 10,A) 는 였류륌 생성합니닀.

a f b 에서 : 우선 순위 묞제는 Glen-O가 제안한 것만큌 나쁘지 않을 수 있지만 사용자 정의 쀑위 핚수가 가장 낮은 우선 순위륌 갖지 않는 한 졎재합니닀. 녌쟁을 위핎 우늬는 귞듀에게 사전 시간을 제공합니닀. ê·ž 겜우,
a^2 f b^2 => f(a^2,b^2)
a+2 f b+2 => a+f(2,b)+2
a^2 f^2 b^2 => (f^2)(a^2,b^2)
a f+2 b => 구묞 였류?

읎것은 몚두 파서륌 작성하는 방법의 자연슀러욎 결곌읎므로 귞런 의믞에서 특별히 곚치 아픈 것은 아닙니닀. 귞러나 ꎀ용구의 음반 사용자에게는 특히 직ꎀ적읎지 않습니닀.

칎레 ꎀ용구의 유용성
(i)->lpad(i,10) 가 lpad<|10 (또는 선택하는 겜우 lpad |\ 10 등)볎닀 나쁘닀는 Glen-O의 의견에 동의합니닀. i 는 완전히 ꎀ렚 없는 읞지 부닎읎며 였류의 잠재적 원읞입니닀. 사싀, 나는 지ꞈ 귞것을 입력할 때 처음에 의도치 않게 (i)->lpad(x,10) 륌 입력했닀고 맹섞합니닀. 따띌서 쀑위 칎레 연산을 하는 것읎 좋은 생각읞 것 같습니닀.
귞러나 귞것읎 의도띌멎 우늬가 정하는 쀑위 ꎀ용구가 묎엇읎든 우늬는 우늬 자신의 칎레 연산을 만듀 수 있습니닀. a f b 읎멎 lpad rcurry 10 와 같은 것읎 좋습니닀. 요점은 í‚€ 입력읎 아니띌 가독성입니닀. 귞래서 나는 읎것읎 <| 에 대한 앜한 죌장읎띌고 생각합니닀.

a |> b c d
나는 읎 제안을 아죌 좋아한닀. |> 읎 양쪜에 공백을 허용하도록 만듀 수 있닀고 생각합니닀. 따띌서 a b |> f c d => f(a,b,c,d) .

(ì°žê³ : a b |> f c d map(lpad 10,A) 의 Glen-O가 몚두 있닀멎 (a b) |> f c d => f((x)->a(x,b),c,d) 띌는 몚서늬 쌀읎슀가 생성됩니닀. 하지만 저는 견딜 수 있닀고 생각하십시였.)

읎것은 a f b 와 같은 연산자 우선 순위 잡멎에서 여전히 유사한 묞제가 있습니닀. 하지만 |> #$26$#$ 의 삌항 연산자의 우선 순위가 아니띌 의 우선 순위 잡멎에서 적얎도 귞것에 대핮 말할 수 있닀멎 얎떻게 든 귞듀은 더 견딜 수 있닀고 생각합니닀.

0.5에서 lpad.(["foo", "bar"], 10) 을(륌) 시도하십시였. Ʞ졎의 |> 는 몚두에게 사랑받는 것은 아닙니닀.

@tkelman : 묞제는 알겠는데 요점은 묎엇입니까? 추가 용도륌 추가하Ʞ 전에 êž°ì¡Ž |> 륌 수정핎알 한닀고 생각하십니까? 귞렇닀멎 얎떻게?

개읞적윌로 êž°ì¡Ž |> 을 제거핎알 한닀고 생각합니닀.

0.5에서 lpad.(["foo", "bar"], 10) 을(륌) 시도하십시였. Ʞ졎의 |> 는 몚두에게 사랑받는 것은 아닙니닀.

요점을 놓치신 것 같아요. 예, func.() 표Ʞ법읎 좋윌며 음부 상황에서는 묞제륌 우회합니닀. 하지만 map 핚수륌 ê°„ë‹ší•œ 데몚로 사용합니닀. 핚수륌 읞수로 사용하는 몚든 핚수는 읎 섀정윌로 읎점을 얻을 수 있습니닀. 예륌 듀얎, 순전히 제 요점을 섀명하Ʞ 위핎 ì°žì¡° 번혞가 있는 최소 공배수륌 Ʞ반윌로 음부 숫자륌 정렬할 수 있습니닀. sort(A,by=i->lcm(i,10)) 또는 sort(A,by=lcm 10) ?

쀑위 연산자륌 정의하는 ì–Žë–€ 방법읎든 Glen-O가 <| 륌 원하는 것을 수행하는 연산자륌 생성할 수 있윌므로 최악의 겜우 sort(A,by=lcm |> currywith 10) . 읎 페읎지의 요점은 a ... f ... b => f(a,b) 륌 만드는 방법을 녌의하는 것입니닀. êž°ì¡Ž |> 또는 제안된 <| 연산자가 가치가 있는지 여부는 ê·ž 점에서 앜간의 ꎀ계가 있닀는 것을 읎핎하지만 너묎 펞향되지 않도록 합시닀.

개읞적윌로 a |> b c 제안읎 지ꞈ까지 나옚 제안 쀑 최고띌고 생각합니닀. Haskell의 êž°ì¡Ž 규칙을 따늅니닀. êž°ì¡Ž |> 연산자와 녌늬적윌로 ꎀ렚읎 있습니닀. 귞것은 합늬적윌로 읜Ʞ 쉜고 합늬적윌로 입력하Ʞ 쉜습니닀. 자연슀럜게 닀륞 용도로 확장된닀고 느끌는 것은 부찚적읞 것입니닀. 동의하지 않는 겜우 제안된 2ì°š 용도뿐만 아니띌 핵심 ꎀ용구에 대한 귀하의 느낌을 최소한 얞꞉하십시였.

음ꎀ성 묞제로 읎얎지므로 "또는 êž°ì¡Ž 쀑위 연산자륌 닀륎게 처늬핎알 혌란을 음윌킬 수 있습니닀"띌고 말했습니닀.

a f b 의 우선 순위륌 결정하는 것읎 얎렵닀는 데 동의합니닀. 예륌 듀얎 in 는 비교 우선 순위의 읎점읎 분명히 있지만 쀑위로 사용되는 많은 핚수가 비교 우선 순위륌 원하지 않을 가능성읎 큜니닀. 귞러나 음ꎀ성 묞제는 볎읎지 않습니닀. 연산자마닀 우선 순위가 닀늅니닀. a f b 륌 추가핎도 $ + 및 * 에 동음한 우선 순위륌 부여하지 않습니닀.

|> 는 읎믞 비교에 읞접한 우선 순위륌 가지고 있습니닀. 닀륞 우선 순위에 대핎서는 솔직히 ꎄ혞가 좋닀고 생각합니닀.

당신읎 나와 동의하지 않고 우늬가 a |> f b 륌 사용했닀멎 유사한 연산자 |+> , |*> 및 |^> 가 있을 수 있습니닀. |> 와 동음하게 작동하지만 쀑앙 연산자볎닀 우선합니닀. 곌하닀고 생각하지만 가능성읎 있습니닀.

우선순위 묞제륌 핎결하Ʞ 위한 또 닀륞 가능성은 (a f b) 와 같읎 음종의 ꎄ혞륌 포핚하는 사용자 지정 쀑위 연산자에 대한 구묞을 사용하는 것입니닀.

ꎀ렚 토론: https://github.com/JuliaLang/julia/issues/554 , https://github.com/JuliaLang/julia/issues/5571 , https://github.com/JuliaLang/julia/pull/14476 , https://github.com/JuliaLang/julia/issues/11608 및 https://github.com/JuliaLang/julia/issues/15612.

나는 묻고 싶닀 - 얎떻게 lpad<|10읎 x|>sin|>exp볎닀 더 "ASCII 샐러드"읞가? 귞러나 |> 표Ʞ법읎 추가되었습니닀.

나는 @tkelman 가 죌장한닀고 상상한닀.

êž°ì¡Ž |>륌 제거핎알 합니닀.

부분적윌로는 _ lpad<|10 및 x|>sin|>exp 가 ASCII 샐러드 영역윌로 진출하Ʞ 때묞입니닀. :).

필수 ꎄ혞가 있는 @toivoh 의 (a f b) 가 지ꞈ까지 최고의 제안읎띌고 생각합니닀.

https://github.com/JuliaLang/julia/issues/11608 ꎀ렚(따띌서 https://github.com/JuliaLang/julia/issues/4882 및 https://github.com/JuliaLang/julia/pull /14653): (a f b) => f(a,b) 읎멎 (a <strong i="8">@m</strong> b) => (<strong i="10">@m</strong> a b) 읎멎 의믞가 있습니닀. 읎렇게 하멎 y ~ a*x+b 에 대한 Ʞ졎의 특수한 겜우 맀크로 녌늬륌 음반(따띌서 훚씬 더 투명핚) (y @~ a*x+b) 로 대첎할 수 있습니닀.

또한 "요구되는 ꎄ혞"는 간결한 쀑위얎 정의에 대핮 선혞되는 ꎀ용구음 수 있습니닀. (얎늬석은 예륌 사용하여) a + b = string(a) * string(b) 띌고 말하는 대신 (lint 도구 또는 컎파음러 겜고에 의핎) (a + b) = string(a) * string(b) 띌고 말하는 것읎 좋습니닀. 나는 읎것읎 싀제로 infix에 대핮 "parens required" 옵션을 선택한 직접적읞 결곌가 아니띌는 것을 알고 있지만, LHS에서 infix륌 사용하는 사람듀에게 싀수로 겜고하지만 귞것을 하는 사람듀을 í•Žê³ í•  수 있는 펞늬한 ꎀ용구입니닀. 목적.

낮 생각에는 현재 (접두얎가 아닌) 핚수 쀑위륌 적용하는 겜우,
귞러멎 연산자읎며 연산자처럌 볎읎고 작동핎알 합니닀.

귞늬고 유니윔드륌 사용하여 정의된 쀑위 연산자륌 지원합니닀.
https://github.com/JuliaLang/julia/issues/552 읎후

원래 제안에서와 같읎 킀워드륌 추가할 수 있도록 확장된 것읎 좋을 것 같습니닀.
예륌 듀얎 1 ⊕₂ 1 == 0
쀑위얎에 대핮 임의의 읎늄을 가질 수 있닀는 것은 앜간 곌도한 것처럌 볎입니닀.

욎영자처럌 볎읎고 행동핎알 합니닀.

쀑위 연산자에 대한 강력한 명명 규칙읎 있얎알 한닀는 데 동의합니닀. 예: 유니윔드의 한 묞자 또는 전치사로 끝납니닀. 귞러나 귞것듀은 컎파음러에 의핎 강제되는 요구 사항읎 아니띌 유Ʞ적윌로 발전하는 규칙읎얎알 합니닀. 확싀히, 나는 #552가 읎알Ʞ의 끝읎띌고 생각하지 않습니닀. 수십 개의 하드 윔딩된 연산자가 있는 겜우 새 Ʞ능을 프로토타읎핑하는 겜우에만 프로귞래밍 방식윌로 더 추가할 수 있는 방법읎 있얎알 합니닀.

...

나에게 (a f b) (및 (a <strong i="10">@m</strong> b) ) 제안은 읎 버귞의 나뚞지 제안볎닀 쀑요합니닀. 나는 거의 팚치륌 만듀고 싶은 유혹을 느낀닀.

(a f b) => f(a,b)
(a f b c d) => f(a,b,c,d)
(a f) =>구묞 였류
(a+2 f+2 b+2) => (f+2)(a+2,b+2)
(t1=a t2=f t3=b) => (t1=f)((t2=a),(t3=b)) (공백은 맀크로에서와 같읎 가능한 가장 낮은 우선 순위륌 가짐)

...

팚치륌 제출하는 것읎 부적절합니까?

나는 마지막 두 가지 겜우륌 읎핎하지 못했습니닀.

(a+2 f+2 b+2)=>(f+2)(a+2,b+2)
(t1=a t2=f t3=b)=>(t1=f)((t2=a),(t3=b))

(a f b c d) 구묞읎 맀우 읎상합니닀. 1 + 2 + 3 는 +(1,2,3) 로 ì“ž 수 있윌므로 f(a,b,c) 는 (a f b f c) 로 ì“°ë©Ž 안 됩니까?

전반적윌로 나는 개읞적윌로 Julia가 현재 허용되는 것 읎상윌로 사용자 지정 쀑위 연산자륌 지원핎알 한닀고 확신하지 않습니닀.

(a f b c d) 에 두 가지 묞제가 있음을 알 수 있습니닀.

첫짞, 더 복잡한 표현을 사용하멎 읜Ʞ가 얎렀욞 것입니닀. 대ꎄ혞가 답답할 수 있는 읎유 쀑 하나는 ì–Žë–€ 대ꎄ혞가 닀륞 대ꎄ혞와 쌍을 읎룚는지 한 눈에 알Ʞ 얎렀욞 수 있Ʞ 때묞입니닀. 읎것읎 쀑위 및 후위( |> ) 연산자가 처음에 바람직한 읎유입니닀. 후위 고정은 맀번 대ꎄ혞륌 처늬할 필요 없읎 멋지고 깔끔한 왌쪜에서 였륞쪜윌로 읜을 수 있Ʞ 때묞에 특히 선혞됩니닀.

둘짞, 요소별로 만드는 것곌 같은 음을 멋지게 할 수 있는 방법읎 없습니닀. 낮 읎핎는 f.(a,b) 가 0.5의 표Ʞ법읎 되얎 f 가 람로드캐슀팅에 대한 읞수에 대핮 요소별로 작동하도록 한닀는 것입니닀. (a f b) 읞 겜우 쀑위 표Ʞ법윌로 동음한 작업을 수행하는 깔끔한 방법은 없습니닀. Ʞ껏핎알 (a .f b) 읎얎알 합니닀. 제 생각에는 .( 가 .+ 및 .* $ 에서 제공하는 대칭의 멋을 잃습니닀.

예륌 듀얎 Haskell의 예제륌 사용하렀는 겜우륌 비교하십시였. #6946의 shashi는 여Ʞ에 상응하는 요점을 만듀었습니닀. Haskell에서는 circle 10 |> move 0 0 |> animate "scale" "ease" 띌고 작성합니닀. 읎 표Ʞ법을 사용하멎 ((circle(10) move 0 0) animate "scale" "ease") 가 됩니닀. 읎는 animate(move(circle(10),0,0),"scale","ease") 볎닀 명확하지 않습니닀. |> 표Ʞ법을 사용하여 서큎을 여러 위치에 복사하렀는 겜우 circle 10 .|> copy [1 15 50] [3 14 25] 가 있을 수 있습니닀. 제 생각에는 읎것읎 아읎디얎륌 구현하는 가장 깔끔한 방법입니닀. 귞런 닀음 람래킷은 작업 순서 묞제륌 처늬하는 음반적읞 역할을 합니닀.

귞늬고 ë‚Žê°€ 지적했듯읎 a|>f b c 는 동음한 표Ʞ법을 더 많읎 사용할 수 있는 자연슀러욎 확장자륌 갖는 읎점읎 있습니닀 f b c 는 "function f with 맀개변수 b 및 c set), 따띌서 i->f(i,b,c) 와 동음합니닀. 읎렇게 하멎 고정뿐만 아니띌 전달하렀는 닀륞 상황에서도 작동할 수 있습니닀. 맀개변수가 있는 핚수(특히 낎장 핚수)(표쀀은 핚수의 객첎륌 뚌저 갖는 것임).

|> 는 또한 얎느 것읎 핚수읞지 분명히 합니닀. 예륌 듀얎 (tissue wash fire dirty metal) 가 있었닀멎 wash 륌 핚수로 한 눈에 읞식하Ʞ가 상당히 얎렀욞 것입니닀. 반멎 tissue|>wash fire dirty metal 는 " wash 는 핚수입니닀"띌는 큰 표시가 있습니닀.

최귌의 반대 의견 쀑 음부는 "하지만 읎 Ʞ능을 ë‚šìš©í•  수 있습니닀!"띌고 말하는 것처럌 듀늜니닀. 낮 대답은 닀음곌 같습니닀. 묌론 할 수 있습니닀. 원한닀멎 읎믞 맀크로륌 사용하여 완전히 읜을 수 없는 윔드륌 작성할 수 있습니닀. 파서의 역할은 합법적읞 사용을 가능하게 하는 것입니닀. 낚용을 막Ʞ 위핎 우늬는 ꎀ례/ꎀ용구륌 가지고 있윌며 겜우에 따띌 삭제합니닀. 구첎적윌로:

나는 마지막 두 가지 겜우륌 읎핎하지 못했습니닀.

읎것듀은 ì–Žë–€ 식윌로든 따띌알 할 예가 아닙니닀. 귞것듀은 우선순위 규칙의 자연슀러욎 결곌륌 볎여쀄 뿐입니닀. (a^2 ಠ_ಠ b^2) => ಠ_ಠ(a^2,b^2) 는 충분히 명확하지만 마지막 두 예제는 몚두 구묞을 낚용하는 것윌로 간죌됩니닀.

f(a,b,c)륌 (afbfc)로 ì“°ë©Ž 안 됩니닀.

(a f b c d) 에 대한 제 제안은 솔직히 말핎서 나쀑에 생각했습니닀. 나는 귞것읎 의믞가 있닀고 생각하고 귞것읎 유용한 예륌 생각핎 ë‚Œ 수 있지만 녌쟁의 여지가 있닀멎 읎 묞제에 대핮 읎 제안을 쀑닚하고 싶지 않습니닀.

[예륌 듀얎:

  • f는 b, c, d륌 사용하여 아마도 복잡하고 아마도 더 ê°„ë‹ší•œ 객첎 a의 "객첎 메소드"입니닀.
  • f는 push! 와 같은 "자연슀럜게 람로드캐슀튞되는" 방법입니닀.

(a f b f c) 가 f + 와 같닀멎 의믞가 있지만 대부분의 연산자는 싀제로 + 와 같지 않윌므로 우늬 몚덞읎 되얎서는 안됩니닀.

더 복잡한 표현을 사용하멎 읜Ʞ 얎렀욞 것입니닀.

닀시 말하지만, 낮 대답은 "귞래서 낚용하지 마십시였"입니닀.

f 쀑위륌 사용하여 $ a / (b + f(c,d^e)) 와 같은 복잡한 표현식을 작성하는 방법을 원한닀고 가정핎 볎겠습니닀. @toivoh 의 제안에서는 a / (b + (c f d^e)) 입니닀. Haskell곌 같은 사용법에서는 |> 우선 순위가 a / (b + c |> f d^e) 띌는 특정 예제륌 수정하Ʞ 위핎 변겜되멎 a / (b + (c |> f d^e)) 또는 "최상"입니닀. @toivoh 's가 여Ʞ만큌 쉜게 좋은 것 같아요.

(tissue wash fire dirty metal)

읎에 대한 핎결책은 쀑위 연산자에 대한 강력한 명명 규칙읎띌고 생각합니닀. 예륌 듀얎, 쀑위 연산자가 유니윔드의 한 묞자여알 하거나 전치사 또는 밑쀄로 끝나알 하는 규칙읎 있는 겜우 위의 낎용은 (tissue wash_ fire dirty metal) 와 같을 것입니닀. .

...

요소별

읎것은 유횚한 우렀입니닀. (a .f b) 는 ((a.f) b) 로 읜을 수 있윌므로 나쁜 생각입니닀. 낮 첫 번짞 제안은 (a ..f b) 읎지만 별로 Ʞ쁘지 않습니닀.

circle 10 |> move 0 0 |> animate "scale" "ease"

나는 jquery륌 사용했Ʞ 때묞에 귞런 핚수 첎읎닝의 읎점을 확싀히 볎았습니닀. 하지만 쀑위 연산자와 같은 묞제는 아니띌고 생각합니닀. (a f b) 제안을 사용하여 위의 낎용을 닀음곌 같읎 작성할 수 있습니닀.

circle 10 |> (move <| 0 0) |> (animate <| "scale" "ease")

... Haskell 버전만큌 간결하지는 않지만 여전히 읜을 수 있습니닀.

() 낎부의 ì„ž 가지 항목윌로 제한될 수 있습니닀.
(a f (b,c))
.(a f (b,c)) 연산자 .( 사용

마지막윌로, 음반적읞 요점에 대한 답변:

전반적윌로 나는 개읞적윌로 Julia가 현재 허용되는 것 읎상윌로 사용자 지정 쀑위 연산자륌 지원핎알 한닀고 확신하지 않습니닀.

분명히 우늬 몚두는 우늬의 의견을 가질 권늬가 있습니닀. (엄지손가띜읎 댓Ꞁ의 핎당 부분을 찞조했는지 여부는 확싀하지 않지만, 귞렇닀멎 3배가 됩니닀.)

귞러나 낮 반론은 닀음곌 같습니닀.

  • Julia는 읎믞 수십 개의 쀑위 연산자륌 가지고 있윌며 ê·ž 쀑 닀수는 맀우 틈새 시장입니닀. 더 많읎 제안되는 것은 불가플합니닀. 누군가가 "얎떻게 ⅋ 가 있고 § 는 없을 수 있습니까?"띌고 말하멎 "닀음 버전읎 널늬 채택될 때까지 Ʞ닀늬Ʞ"볎닀는 "직접 핎볎섞요"띌고 대답하고 싶습니닀.
  • (a § b) 와 같은 것은 맀우 읜Ʞ 쉜고 구묞은 한두 가지 예제에서 ë°°ìšž 수 있을 만큌 충분히 가볍습니닀.
  • ë‚Žê°€ 읎 묞제륌 제Ʞ한 첫 번짞 사람읎 아니며 마지막 사람도 아닙니닀. ì–žì–Ž 디자읎너는 크늬핑(였류) Ʞ능에 대핮 맀우 회의적읎얎알 한닀는 것을 읎핎합니닀. 한 번 못생ꞎ Ʞ능을 추가하멎 Ʞ볞적윌로 나쀑에 ê³ ì¹  수 없Ʞ 때묞입니닀. 하지만 위에서 말했듯읎 (a f b) 는 후회하지 않을만큌 깚끗하닀고 ​​생각합니닀.

(a f b) 의 선명도가 확싀하지 않습니닀.

가능한 사용 사례는 닀음곌 같습니닀.
select((((:emp_id, :last_name) from employee_tbl) where (:city, == ,'indianapolis')) orderby :emp_id));

읎것은 확싀히 쀑위 핚수의 싀행 가능한 사용입니닀.
select 핚수는 ID 핚수읎거나 빌드된 쿌늬륌 데읎터베읎슀로 볎냅니닀.

읎것은 명확한 윔드입니까?
난 귞냥 몰띌.

.(a f b)

ë„€, 읎핎가 됩니닀. 하지만 가독성읎 좋지 않습니닀.

(a @. f b) 읎 더 읜Ʞ 쉬욎가요? @. 맀크로륌 활성화하는 것은 ê°„ë‹ší•œ 한 쀄짜늬읎Ʞ 때묞입니닀.

[[[생각핎볎멎, ꎄ혞 없읎 쀑위 맀크로륌 허용하멎 @Glen-O가 ꎄ혞륌 사용하여 원하는 작업을 수행할 수 있습니닀. circle(10) @> move 0 0 @> animate "scale" "ease" => @> (@> circle(10) move 0 0) animate "scale" "ease" =macro> animate(move(circle(10),0,0),"scale","ease") . 나는 ê·ž 솔룚션읎 (a f b) 볎닀 못하닀고 생각하지만 적얎도 낮 눈에는 읎 전반적읞 버귞륌 í•Žê²°í•  것입니닀.]]]

...

select((((:emp_id, :last_name) from employee_tbl) where (:city, = ,'indianapolis')) orderby :emp_id);

조걎식읎 읎상하게 읞용될 필요가 없도록 "where"에 맀크로륌 사용하는 것읎 좋습니닀. 귞래서:

select((((:emp_id, :last_name) from employee_tbl) <strong i="22">@where</strong> city == 'indianapolis') orderby :emp_id);

ꎄ혞는 앜간 성가시지만 닀륞 한펞윌로는 파서가 없읎 읎러한 종류의 표현을 처늬할 합늬적읞 방법읎 없닀고 생각합니닀.

select((((:emp_id, :last_name) from employee_tbl) <strong i="6">@where</strong> city == 'indianapolis') orderby :emp_id);

ꎄ혞는 앜간 성가시지만 닀륞 한펞윌로는 파서가 없읎 읎러한 종류의 표현을 처늬할 합늬적읞 방법읎 없닀고 생각합니닀.

닀시 생각핎볎멎 ê·ž 표현의 우선 순위는 였륞쪜에서 왌쪜입니닀. 따띌서 쀑위 맀크로륌 사용하멎 닀음곌 같읎 될 수 있습니닀.

select((:emp_id, :last_name) <strong i="11">@from</strong> employee_tbl <strong i="12">@where</strong> city == 'NYC' <strong i="13">@orderby</strong> :emp_id)

또는:

<strong i="17">@select</strong> (:emp_id, :last_name) <strong i="18">@from</strong> employee_tbl <strong i="19">@where</strong> city == 'NYC' <strong i="20">@orderby</strong> :emp_id

귞래서 나는 여전히 (a f b) 륌 좋아하지만 쀑위 맀크로도 좋은 대답읎띌는 것을 알게 되었습니닀.

닀음은 예제륌 통한 전첎 제안곌 장점 및 닚점입니닀.

죌요 용도:

  • a <strong i="28">@m</strong> b => <strong i="30">@m</strong> a b
  • a <strong i="33">@m</strong> b c => <strong i="35">@m</strong> a b c
  • a <strong i="38">@m</strong> b <strong i="39">@m2</strong> c => <strong i="41">@m2</strong> (<strong i="42">@m</strong> a b) c
  • <strong i="45">@defineinfix</strong> f; a <strong i="46">@f</strong> b => macro f(a,b...) :(f($a,$b...)) end; <strong i="48">@f</strong> a b => f(a,b)

윔너 쌀읎슀: (좋은 윔드가 아니띌 닚지 파서가 얎떻게 작동하는지 볎여죌Ʞ 위핚)

  • t1=a <strong i="54">@m</strong> t2=b t3=c => <strong i="56">@m</strong> t1=a t2=b t3=c (좋은 프로귞래밍 슀타음은 아니지만)
  • t1 + a <strong i="59">@m</strong> t2 + b => <strong i="61">@m</strong> t1+a t2+b (좋은 프로귞래밍 슀타음은 아니지만)
  • a b <strong i="64">@m</strong> c => 구묞 였류(??)
  • a <strong i="67">@m</strong> b [c,d] => 하지 마섞요. 하지만 <strong i="70">@m</strong> a b[c,d] (ETA: 아니요, 팚치 륌 사용하멎 <strong i="72">@m</strong> a b ([c,d]) 로 나였므로 더 좋을 것입니닀.)
  • a <strong i="75">@m</strong> b ([c,d]) => <strong i="77">@m</strong> a b ([c,d])
  • [a <strong i="80">@m</strong> b] => 나쁜 슀타음, 명확하게 하Ʞ 위핎 ꎄ혞 륌 사용하지만 [a (<strong i="83">@m</strong> b)] (??)
  • a @> f b => @> a f b => f(a,b)
  • <strong i="90">@outermacro</strong> a b <strong i="91">@m</strong> c d => <strong i="93">@outermacro</strong> a (<strong i="94">@m</strong> b c d)

장점:

  • 쀑위 맀크로륌 정의하고 쀑위 핚수륌 묎료로 가젞옵니닀(맀크로 평가의 음회성 였버헀드 포핚. 파서 맀직만큌 였버헀드가 낮지는 않지만 몚든 평가에서 추가 핚수 혞출을 사용하는 것볎닀 훚씬 낫습니닀)
  • 위의 SQL곌 같은 예에서 볌 수 있듯읎 강력한 DSL로 읎얎질 수 있습니닀.
  • 한 쀄짜늬 맀크로읎Ʞ 때묞에 별도의 |> 연산자가 필요하지 않습니닀. <| 및 @Glen-O의 나뚞지 제안도 마찬가지입니닀.
  • 명시적읎므로 (a f b) 와 달늬 우발적윌로 사용될 위험읎 맀우 낮습니닀.
  • 표시된 대로 @defineinfix 맀크로는 맀크로가 아닌 Ʞ능에 대한 앜칭 사용을 허용할 수 있습니닀.

(사소한) 닚점:

  • 우선 순위 및 귞룹화는 대부분의 겜우 RtoL에서 잘 작동하는 것처럌 볎읎지만 ꎄ혞가 필요한 예왞가 있습니닀.
  • a @> f b 또는 a <strong i="112">@f</strong> b 도 (a f b) 만큌 가독성읎 떚얎진닀고 생각합니닀.

읎 슀레드가 얌마나 활성화되었는가륌 감안할 때 읎 죌제에 대한 나의 원래 우렀륌 사람듀에게 상Ʞ시킀겠습니닀. 구묞에 ꎀ한 묞제는 종종 엄청난 양의 활동을 생성하지만 ê·ž 활동의 양은 음반적윌로 장Ʞ적 가치에 비례하지 않습니닀. 녌의 쀑읞 변겜 사항입니닀. 대부분 구묞에 대한 슀레드가 췚향에 대한 순수한 녌쟁에 가까워지Ʞ 때묞입니닀.

활동량읎 음반적윌로 비례하지 않습니닀.

죄송합니닀. 나는 아마도 앞뒀로 듀얎가는 것에 가장 죄가 있습니닀.

닀륞 한펞윌로, 나는 읎 슀레드가 "사용 가능한" 진전을 분명히 만듀었닀고 생각합니닀. 최신 제안 (a f b) 또는 [ a @> f b , a <strong i="10">@f</strong> b 륌 바로 가Ʞ로 정의할 수 있음] a %f% b 또는 a |> f <| b .

귞래도 나는 더 읎상의 앞뒀가 없는 댓Ꞁ읎 더 읎상 진전을 읎룚지 못할 것읎띌고 생각하며, 사람듀읎 제안할 진정윌로 새로욎 것읎 없는 한 지ꞈ부터 추천 또는 추천을 사용하도록 권장합니닀. 슉, êž°ì¡Ž 제안에 대한 직교 변겜읎 아님). "투표 가능한 제안"에 "만섞" 읎몚티윘(폭발 원뿔형)을 추가했습니닀. 쀑위 위치에 임의의 핚수에 대한 특수 구묞읎 없얎알 한닀고 생각한닀멎 버귞 전첎에 대핮 반대 투표륌 하십시였.

...

ETA: 읎 토론은 읎제 decision 태귞륌 얻을 만큌 충분히 성숙했닀고 생각합니닀.

ì°žê³ ë¡œ (닀륞 누군가가 지적핎죌Ʞ륌 Ʞ대했습니닀).
SQL곌 같은 구묞을 포핚하렀멎 작업에 적합한 도구가 비표쀀 묞자엎 늬터럎읎띌고 생각합니닀.
몚든 맀크로와 마찬가지로 혞출 시 범위의 몚든 변수에 액섞슀할 수 있습니닀.
우선 순위륌 선택하여 고유한 DSL을 지정할 수 있윌며 컎파음 시간에 싀행됩니닀.

select((((:emp_id, :last_name) from employee_tbl) where (:city, == ,"indianapolis")) orderby :emp_id));

더 잘 쓰여진닀

sql"SELECT emp_id, last_name FROM employee_tbl WHERE city == 'indianapolis' ORDER BY emp_id"

비표쀀 묞자엎 늬터럎 은 맀우 강력한 구묞입니닀.
DSL을 포핚하는 데 사용되는 좋은 예륌 찟을 수 없습니닀.
하지만 귞듀은 할 수 있습니닀.

귞늬고 읎 겜우 결곌는 정의할 수 있는 쀑위 연산볎닀 훚씬 깚끗하닀고 ​​생각합니닀.
자첎 마읎크로파서/토큰나읎저륌 작성핎알 하는 였버헀드가 있지만.


결정 태귞가 필요하지 않닀고 생각합니닀.
읎것은 PR로 구현되지 않윌며 사용 가능한 프로토타입도 없습니닀.
사람듀읎 귞것을 테슀튞 할 수 있습니닀.
8개의 사용 가능한 프로토타입읎 있는 https://github.com/JuliaLang/julia/issues/5571#issuecomment -205754539와 대조

읎 Ꞁ을 읜을 때마닀 느낌읎 였륎띜 낎늬띜 합니닀. 싀제로 핎볎지 않윌멎 몚륌 것 같아요. 귞늬고 지ꞈ은 귞것을 묎엇에 사용할지조찚 몚륎겠습니닀. (F#에서 사용한 |> 및 <| 에 대한 음부 정의와 달늬)

SQL곌 유사한 구묞, 작업에 적합한 도구는 비표쀀 묞자엎 늬터럎입니닀.

SQL읎 NSL로 가장 잘 수행되는지 여부에 ꎀ계없읎 읞띌읞 맀크로가 맀우 유용할 만큌 충분히 복잡하지만 자첎 마읎크로파서/토큰나읎저륌 작성할 가치가 있을 정도로 복잡하지 않은 DSL 수쀀읎 있닀고 생각합니닀.

지ꞈ은 ë‚Žê°€ 귞것을 묎엇에 사용할지조찚 몚늅니닀. (F#에서 사용한 |> 및 <|에 대한 음부 정의와 달늬)

읞띌읞 맀크로 제안을 통핎 사람듀은 묎엇볎닀도 자신의 |> 또는 <| 같은 맀크로륌 싀행할 수 있윌므로 F#에서 수행한 몚든 작업에 사용할 수 있습니닀.

(나는 앞뒀로 자전거 읎동 녌쟁에 듀얎가고 싶지 않지만 아래 때묞에 얎욌든 응답하고 있었고 읞띌읞 맀크로 제안은 상대적윌로 맀끄러욎 하나의 돌로 여러 새륌 죜읞닀고 생각합니닀.)

결정 태귞가 필요하지 않닀고 생각합니닀.

ë‚Žê°€ 파서 팚치륌 만드는 것읎 적절한지 읎전에 묌었지만 아묎도 대답하지 않았습니닀. 지ꞈ까지 귞것에 대한 유음한 닚얎는 닀음곌 같습니닀.

Julia 1.0 읎전에는 "구묞 혁신" 방식에 큰 지장읎 없을 것읎띌고 생각합니닀.

지ꞈ 팚치륌 만드는 것에 반대하는 것처럌 볎음 수 있습니닀. 죌변에 앉아서 앜간 썩을 수 있Ʞ 때묞입니닀. 귞러나 지ꞈ 당신은 우늬가 "PR [또는] 사용 가능한 프로토타입윌로 구현"하지 않는 한 (지ꞈ 결정하지 ì•Šêž°ë¡œ 한 결정을 포핚하여) 읎것에 대한 결정을 낮멮 가치가 없닀고 말하고 있습니닀.

귞게 묎슚 뜻읎알? (PR읎란 묎엇입니까?) @ 토큰 대신 '@' 묞자륌 사용하는 맀크로가 작업을 수행하여 <strong i="22">@testinline</strong> a '@'f b => @f(a, b) ? 아니멎 julia-parser.scm에 팚치륌 제출핎알 합니까? (싀제로 귞런 팚치륌 작성하Ʞ 시작했고 ê°„ë‹ší•Žì•Œ 할 것 같지만 낮 Scheme은 맀우 녹슬었습니닀.) 테슀튞 쌀읎슀륌 만듀얎알 합니까?

현재 읎 버귞에는 13명의 찞가자가 있습니닀. 하나 읎상의 제안에 투표하거나 버귞 자첎에 반대 투표륌 한 사람은 쎝 5명읎며, 읞띌읞 맀크로 제안읎 테읎랔에 올띌간 후 ê·ž 쀑 한 명만 귞렇게 했습니닀. 아직 프로토타읎핑을 할 때띌는 확신읎 듀지 않습니닀. 마지막 진지한 제안 읎후에 투표한 사람의 수가 찞가자의 절반읎 되었을 때 음종의 대략적읞 합의가 읎룚얎지고 프로토타입을 만듀고 테슀튞하고 결정하는 시간읎 되었윌멎 합니닀(또는, 겜우에 따띌 아읎디얎륌 포Ʞ할 수 있음).

"PR [또는] 사용 가능한 프로토타입윌로 구현".
가지고 놀 수 있는 것을 말합니닀.
귞래서 싀제로 ì–Žë–€ 느낌읞지 알 수 있습니닀.

PR은 풀 늬퀘슀튞(pull request)읎므로 팚치는 당신읎 사용하던 용얎입니닀.

PR을 만든 겜우 닀욎로드하여 테슀튞할 수 있습니닀.
맀크로로 구현했닀멎 더 간닚하지만
또는 비표쀀 묞자엎 늬터럎,
julia륌 빌드하지 않고도 테슀튞할 수 있습니닀.

낮 부늄읎 아닌 것처럌, 하지만 ë‚Žê°€ 가지고 놀 수 있는 것 없읎 낮 자신의 의견을 낎Ʞ에는 묎몚할 것 같습니닀.

또한 자전거 볎ꎀ소륌 앞뒀로 읎동하지 않윌렀멎 +1합니닀.

...또는 맀크로와 비표쀀 묞자엎 늬터럎읎 있는 Infix.jl 팚킀지음 수 있습니닀.

우늬는 읎 대화에서 "작업 윔드 또는 GTFO" 지점에 확싀히 도달했습니닀.

자, 닀음은 작동하는 윔드입니닀. https://github.com/jamesonquinn/JuliaParser.jl

ETA: 특정 컀밋을 ì°žì¡°í•Žì•Œ 하나요, 아니멎 최신 마슀터에 대한 위의 링크가 ꎜ찮은가요?

...

( |> , <| , ~ 및 @defineinfix 에 핎당하는 것곌 같읎 ë‚Žê°€ 원하는 펞늬한 맀크로가 없습니닀. 위의 예에서 ~ 또는 |> 연산자에 대한 읎제 쓞몚없는 특수 사례 녌늬륌 _deprecate_ 제거 하지 않습니닀. 작동하도록 파서가 변겜되었을 뿐입니닀. Ʞ볞 Ʞ능을 테슀튞했지만 몚든 겜우는 아닙니닀.

...

~ 륌 사용한 현재의 추악한 핎킹은 읎런 종류의 명확한 사용 사례가 있음을 볎여쀍니닀. 읎 팚치륌 사용하멎 맀크로 동작읎 필요할 때 @~ 띌고 말합니닀. 특별한 쌀읎슀 없읎 훚씬 깚끗합니닀. 아니멎 ~ 읎 완전히 독특하고 누구도 닀시는 귞렇게 하고 싶얎하지 않을 것읎띌고 진지하게 믿는 사람읎 있습니까?

팚치(넀읎티람 부튞슀튞랩 파서륌 대상윌로 하Ʞ 때묞에 아직 PR읎 아니지만 현재로서는 PR 잡멎에서 우선 순위가 되얎알 핹)가 여Ʞ에 있는 묞제 읎늄볎닀 음반적윌로 더 유용합니닀. 묞제 읎늄은 "사용자 지정 쀑위 연산자"입니닀. 팚치는 쀑위 맀크로륌 제공하며 쀑위 연산자는 ê·ž 부작용윌로만 제공됩니닀.

팚치는 현재로서는 람레읎킹 첎읞지가 아니지만 읎것읎 계획읎 된닀멎 닀음 닚계는 현재 졎재하는 ~ 및 |> 륌 사용하지 않는 것읎 될 것윌로 예상합니닀. 변겜 사항을 깚고 있습니닀.

...

몇 가지 ê°„ë‹ší•œ 테슀튞가 추가되었습니닀.

11608은 우늬 쀑 많은 사람듀읎 쀑위 맀크로륌 원하지 않윌며 ~ 구묞 분석의 현재 사례 쀑 하나가 싀수띌는 맀우 분명한 합의로 마감되었습니닀(R 혞환성을 위핎 쎈Ʞ에 만듀얎졌윌며 특별히 좋은 읎유는 없습니닀). 우늬는 귞것을 더 읎상 사용하지 않고 ê²°êµ­ 제거할 예정읎지만 아직 수행하지 않았습니닀(JuliaStats 팚킀지의 수식 읞터페읎슀에 대한 API 수정 작업곌 핚께).

맀크로는 읎제 Ʞ술적윌로 음반적읎지만 입력 읞수는 항상 Expr , Symbol 또는 늬터럎입니닀. 따띌서 핚수(쀑위 또는 Ʞ타)와 같은 방식윌로 팚킀지에 정의된 새로욎 유형윌로 싀제로 확장할 수 없습니닀. 쀑위 맀크로의 가능한 사용 사례는 접두사 죌석 맀크로 DSL 또는 묞자엎 늬터럎에서 더 잘 제공됩니닀.

(음찍 게시핎서 죄송합니닀. 지ꞈ 수정했습니닀.)

#11608에서 몇 가지 부정적읞 죌장을 뎅니닀.

===

닀음은 묎엇윌로 변할까요?
...
y = 0.0 @in@ x == 1.0 ? 1 @in@ 2 : 3 @in@ 4

읎것은 슀레드에서 처늬되었습니닀.

귞런 겜우에는 항상 ꎄ혞륌 사용합니닀 ...

귞늬고

같은 판례 ... 맀크로 없읎 적용: 0.0 in 1 == 1.0 ? 2 in 2 : 3 in 4

===

사람듀읎 구현, 유지 ꎀ늬, 테슀튞, 사용 방법 등을 배워알 하는 Julia에 더 많은 Ʞ능.

여Ʞ에서 (부분적윌로) 답변(및 두 번짞)되었습니닀.

"파서 개발자의 두통"은 가능한 가장 낮은 우렀입니닀.

===

닚음 사용자 윔드 Ʞ반에서 명확하게 핚께 사용할 수 있는 동음한 맀크로 연산자에 대한 정의륌 2개의 팚킀지가 동시에 가질 수 있는 방법은 없나요?

읎것은 흥믞로욎 점입니닀. 분명히 맀크로가 핚수륌 혞출하멎 핚수의 몚든 디슀팚치 권한읎 있습니닀. 귞러나 ~ 와 같읎 싀제 맀크로읞 겜우에는 더 복잡합니닀. 예, 핚수로 혞출을 시도하고 맀크로로 사용하Ʞ 위핎 였류륌 포착하는 것곌 같은 핎킹된 í•Žê²° 방법을 상상할 수 있습니닀.

귞러나 읎것은 몚든 맀크로에 대한 묞제만큌읎나 쀑요합니닀. 두 팚킀지가 몚두 맀크로륌 낎볎낎는 겜우 "사용"윌로 둘 ë‹€ 가질 수 없습니닀.

읎것읎 쀑위 맀크로의 묞제음 가능성읎 더 큜니까? Ꞁ쎄, 귞것은 사람듀읎 ê²°êµ­ 귞것을 사용하는 것에 달렀 있습니닀.

  • 사용자 정의 쀑위 핚수륌 갖는 방법입니닀. 읎 겜우 닀륞 Ʞ능볎닀 나쁘지 않습니닀. 디슀팚치가 잘 작동합니닀.
  • 닀륞 프로귞래밍 슀타음을 사용하는 방법윌로 @Glen-O가 위에서 녌의한 |> 및 <| $와 같은 연산자륌 사용합니닀. 읎 겜우 충돌 가능성읎 거의 없읎 맀크로가 묎엇을 의믞하는지에 대한 공통 규칙읎 빠륎게 발전할 것읎띌고 생각합니닀.
  • 위의 SQL 예제와 같은 특수 목적 DSL을 만드는 방법윌로. 나는 읎것듀읎 특정 상황에서 사용될 것읎띌고 생각하며 충돌 가능성은 귞늬 나쁘지 않습니닀.
  • R의 ~ 와 같은 겜우. 처음에는 읎것읎 가장 묞제가 있얎 볎입니닀. R에서 ~ 는 여러 가지 용도로 사용됩니닀. 귞러나 거Ʞ에서도 닀음곌 같읎 ꎀ늬할 수 있닀고 생각합니닀.

macro ~(a,b) :(~(:$a, quote($b))) end

귞러멎 ~ 핚수는 LHS의 유형을 Ʞ반윌로 디슀팚치할 수 있지만 RHS는 항상 Expr입니닀. 읎런 종류의 것은 R(회귀 및 귞래프 작성)에서 사용하는 죌요 용도가 공졎할 수 있도록 합니닀. 슉, 닀륞 팚킀지에서 왔음에도 불구하고 올바륎게 발송합니닀.

(ì°žê³ : 위의 낎용은 수정되었습니닀. 처음에는 a ~ b + c 와 같은 R 표현식읎 R의 지연 평가륌 통핎 b 와 c 의 바읞딩을 사용했닀고 생각했지만 귞렇지 않습니닀. t; b 및 c 는 명시적윌로 전달된 데읎터 프레임의 ì—Ž 읎늄읎지, 암시적윌로 전달되는 로컬 범위의 변수 읎늄읎 아닙니닀.)

===

여Ʞ서 앞윌로 나아갈 수 있는 유음한 방법은 싀제 구현을 개발하는 것입니닀.

ë‚Žê°€ 한 음.

===

맀크로는 읎제 Ʞ술적윌로 음반적읎지만 입력 읞수는 항상 Expr, Symbol 또는 늬터럎입니닀. 따띌서 핚수(쀑위 또는 Ʞ타)와 같은 방식윌로 팚킀지에 정의된 새로욎 유형윌로 싀제로 확장할 수 없습니닀.

읎것은 위의 요점곌 ꎀ렚읎 있습니닀. 쀑위 맀크로가 특정 핚수륌 혞출하는 한, ê·ž 핚수는 여전히 음반적읞 방식윌로 디슀팚치륌 ​​통핎 확장할 수 있습니닀. 특정 핚수륌 혞출하지 않는 한 확장하거나 재정의핎서는 안 되는 구조적/구묞적(예: |> 읎 현재 수행하는 작업)을 수행하고 있습니닀. 핚수륌 혞출하더띌도 맀크로띌는 사싀은 여전히 ​​유용할 수 있습니닀. 예륌 듀얎, 음부 읞수륌 읞용하거나 윜백윌로 처늬하거나 직접 핚수 혞출읎 할 수 없는 방식윌로 변수의 읎늄 및 바읞딩곌 동시에 상혞 작용할 수도 있습니닀.

===

쀑위 맀크로의 가능한 사용 사례는 접두사 죌석 맀크로 DSL 또는 묞자엎 늬터럎에서 더 잘 제공됩니닀.

찞조된 슀레드에서 지적한 바와 같읎:

[Infix는] 우늬 ì–žì–Žê°€ 귞런 식윌로 작동하Ʞ 때묞에 구묞 분석하Ʞ가 더 쉜습니닀(영얎 및 대부분의 서양 사용자의 겜우). (음반적윌로 욎영자도 마찬가지입니닀.)

예륌 듀얎, 더 읜Ʞ 쉜고 ì“°êž° 쉜습니닀.

select((:emp_id, :last_name) <strong i="8">@from</strong> employee_tbl <strong i="9">@where</strong> city == 'NYC' <strong i="10">@orderby</strong> :emp_id)

또는

send(orderby((<strong i="14">@where</strong> selectfrom((:emp_id, :last_name), employee_tbl) city == 'NYC'), :emp_id))

?

===

드디얎:

11608은 ꜀ 명확한 합의로 마감되었습니닀.

"누가 ê·ž 음을 할 것읞가"가 결정적읞 투표륌 하는 저에게 ꜀ 고륎게 분할된 것 같습니닀. 읎제 적얎도 부분적윌로는 말읎 안 됩니닀. 나는 JuliaParser에서 작업을 수행했윌며 사람듀읎 읎 아읎디얎륌 좋아한닀멎 Scheme에서 수행할 의향읎 있습니닀.

핎킹된 juliaparser에 대한 Ɥ정적읞 반응읎 없는 한 읎것은 읎 슀레드의 마지막 게시묌입니닀. 낮 의지륌 강요하는 것은 낮 의도가 아닙니닀. 낮 ꎀ점을 제시하Ʞ 위핎.

쀑위 맀크로( a <strong i="6">@m</strong> b => <strong i="8">@m</strong> a b )에 찬성합니닀. 귞렇닀고 í•Žì„œ ë‚Žê°€ 반대하는 죌장을 몚륞닀는 것은 아닙니닀. 닀음은 ë‚Žê°€ 반대하는 가장 좋은 죌장을 요앜하는 방법입니닀.

ì–žì–Ž Ʞ능은 -100에서 시작합니닀. 귞것을 극복할 수 있는 쀑위 맀크로는 묎엇을 제공합니까? 볞질적윌로 접두사 맀크로로 수행할 수 없는 쀑위 맀크로로 수행할 수 있는 것은 없습니닀.

낮 대답은: Julia는 묎엇볎닀도 STEM 프로귞래뚞륌 위한 얞얎입니닀. 수학자, 엔지니얎, 통계학자, 묌늬학자, 생묌학자, Ʞ계 학습 전묞가, 화학자, 계량겜제학자... 귞늬고 대부분의 사람듀읎 깚닫고 있는 한 가지는 좋은 표Ʞ법의 유용성입니닀. 통계에 익숙한 예륌 듀멎 닀음곌 같습니닀. 독늜 확률 변수륌 추가하는 것은 PDF륌 컚볌룚션하거나 CDF의 파생묌을 컚볌룚션하는 것곌 동음하지만 전자륌 사용하여 묎얞가륌 표현하는 것은 종종 후자볎닀 훚씬 더 간결하고 읎핎하Ʞ 쉜습니닀. .

쀑위 대 접두사 대 후위는 얎느 정도 췚향의 묞제입니닀. 귞러나 많은 겜우에 쀑위얎륌 선혞하는 객ꎀ적읞 읎유도 있습니닀. 접두얎와 접믞사는 Forth 프로귞래뚞가 독음 정치읞처럌 듀늬거나 Lisp 프로귞래뚞가 쎘슀킀 풍자 만화처럌 듀늬게 만드는 것곌 같은 연속 연산자의 소화 불가능한 칚전묌로 읎얎지는 반멎, infix는 연산자륌 종종 읞지적윌로 가장 쀑요한 위치에 넣습니닀. 가능한 몚든 플연산자에 가까욎 자연적읞 장소. 아묎도 Forth에서 수학 녌묞을 쓰지 않는 데는 읎유가 있윌며 독음 수학자듀도 방정식을 작성할 때 쀑위 연산자륌 사용하는 읎유가 있습니닀.

예, 쀑위 맀크로륌 사용하여 난독화된 윔드륌 작성할 수 있습니닀. 귞러나 êž°ì¡Ž 접두사 맀크로도 낚용되Ʞ 쉜습니닀. 낚용하지 않윌멎 쀑위 맀크로가 훚씬 더 명확한 윔드로 읎얎질 수 있습니닀.

  • (a+b <strong i="18">@choose</strong> b) 읎 binomial(a+b,b) ;
  • score ~ age + treatment 읎 linearDependency(:score, :(age + treatment)) ;
  • domSelect("#logo") @| css "color" "red" @| fadeIn "slow" <strong i="25">@thenApply</strong> addClass "dummy" 는 addOneTimeEventListener(fadeIn(css(domSelect("#logo"),"color","red"),"slow"),"done",(obj,evt)->addClass(obj,"dummy")) 쀑에서 지옥을 능가합니닀.

나는 읎것듀읎 닚지 장난감의 예띌는 것을 알고 있지만 원칙은 유횚하닀고 생각합니닀.

비표쀀 묞자엎 늬터럎로 위의 작업을 수행할 수 있습니까? 두 번짞와 ì„ž 번짞 예는 NSL로 작동합니닀. 귞러나 NSL의 묞제는 너묎 많은 자유륌 쀀닀는 것입니닀. 특정 묞법에 익숙하지 않은 한 NSL의 토큰읎 묎엇읞지, 작동 순서는 말할 것도 없고요. 쀑위 맀크로륌 사용하멎 위의 몚든 예륌 수행할 수 있는 충분한 자유가 있지만 "좋은" 윔드륌 읜을 때 토큰읎 묎엇읎며 암시된 ꎄ혞가 얎디로 가는지 명확하지 않습니닀.

알렀지지 않은 믞지수에서 알렀진 믞지수로 읎동하렀멎 특정 항목읎 필요합니닀. 불행히도 읎륌 수행하는 메컀니슘읎 없습니닀. 당신의 죌장에는 졎재하지 않는 구조가 필요합니닀.

읎제 <| 읎 였륞쪜 결합(#24153)읎므로 쎈Ʞ a |>op<| b 제안읎 작동합니까?

나는 https://github.com/JuliaLang/julia/pull/24404#issuecomment -341570934에서 Steven읎 얞꞉한 핎킹을 위한 팚킀지륌 만듀었습니닀.

읎것읎 영향을 믞치는 잠재적 쀑위 연산자의 수는 아니지만 <~ 륌 사용하고 싶습니닀. 파서는 협조하지 않을 것입니닀 -- ë‚Žê°€ 묌걎을 조심슀럜게 띄워도 a <~ b 가 a < (~b) $ 륌 의믞하Ʞ륌 원합니닀.

<- 에도 비슷한 묞제가 있습니닀.

읎것읎 읎믞 읎 묞제나 닀륞 묞제에 의핎 닀룚얎졌닀멎 죄송하지만 찟을 수 없습니닀.

잠재적윌로 a < ~b 에 공백읎 필요할 수 있습니닀. 우늬는 전에 귞런 규칙을 추가했습니닀. 귞런 닀음 쀑위 연산자로 <- 및 <~ 륌 추가할 수 있습니닀.

감사 합니닀 @JeffBezanson , 귞것은 좋을 것입니닀! 읎것은 특별한 겜우입니까, 아니멎 더 음반적읞 규칙입니까? 더 많은 쀑위 연산자륌 허용하고, 명확하고 예잡 가능한 윔드륌 제공하고, êž°ì¡Ž 윔드륌 가능한 한 적게 쀑닚하Ʞ 위핎 규칙읎 얎떻게 되얎알 하는지에 대한 몇 가지 섞부 사항읎 있닀고 확신합니닀. 얎욌든 도움곌 빠륞 응답에 감사드늜니닀. 새핎 ë³µ 많읎 받윌섞요!

a <~ b 가 a < ~b a =+ 1 륌 였류(또는 최소한 겜고)로 볎고 싶습니닀.

나는 읎것읎 ꜀ 였래된 토론읎띌는 것을 알고 있고 질묞한 질묞은 ꜀ 였래전에 제Ʞ되었지만 대답할 가치가 있닀고 생각했습니닀.

읎제 <| 읎 였륞쪜 결합(#24153)읎므로 쎈Ʞ a |>op<| b 제안읎 작동합니까?

아니요, 불행히도 |> 가 여전히 우선합니닀. 업데읎튞가 완료되멎 <|(a,b)=a(b) 륌 정의하멎 a<|b<|c 륌 성공적윌로 수행하여 a(b(c)) ...륌 얻을 수 있지만 읎것은 닀륞 개념입니닀.

2년 동안 동결, 2, 5음 전 댓Ꞁ곌 컀밋 !

사용자 정의 가능한 읎항 연산자 f45b6be 묞서 ì°žì¡°

읎 페읎지가 도움읎 되었나요?
0 / 5 - 0 등꞉