Julia: طلب الميزة: إضافة عامل للسماح بفصل الأسطر في تعريف المصفوفة

تم إنشاؤها على ١١ يونيو ٢٠١٨  ·  52تعليقات  ·  مصدر: JuliaLang/julia

اهلا ياجماعة،

لقد بدأت مناقشة في الخطاب [1] حول كيف يمكننا تعريف مصفوفة بأسطر فاصلة دون إنشاء صف جديد. على سبيل المثال:

A = [1 2 3 4 5
     6 7 8 9 10]

تمت ترجمته كمصفوفة 2 × 5 ، لأنه يتم تفسير حرف السطر الفاصل على أنه نهاية الصف الأول (وهو أمر جيد). ومع ذلك ، تم تطبيق نموذج MSIS [2] الذي يتطلب تعريف المصفوفات بـ 150 عمودًا. في هذه الحالة ، إذا اخترت ترميز هذه المصفوفات في الكود المصدري بشكل ثابت للحفاظ على التوافق ، فسيتعين علي كتابة 150 عددًا في سطر واحد ، وهذا ليس جيدًا.

لدى Matlab عامل التشغيل ... لهذا:

A = [1 2 3 4 5 ...
     6 7 8 9 10]

والذي يترجم إلى مصفوفة 1x10.

أخيرًا ، أتساءل عما إذا كان بإمكاننا الحصول على شيء كهذا في جوليا. حاليًا ، الحل الوحيد كما هو مقترح في [1] هو خداع المحلل اللغوي على النحو التالي:

A = [1 2 3 4 [5
     ] 6 7 8 9 10]

الذي يعمل ولكنه ليس "الأمثل".


[1] https://discourse.julialang.org/t/declare-a-matrix-with-break-lines/11568/18
[2] https://ccmc.gsfc.nasa.gov/pub/modelweb/atmospheric/msis/nrlmsise00/nrlmsise00_sub.for

design parser

التعليق الأكثر فائدة

A = [1 2 3 4 5  #=
  =# 6 7 8 9 10]

يعمل أيضًا ، ولا يتضمن تخصيص مصفوفة [5] إضافية مؤقتة. التعليقات متعددة الأسطر (# 69) FTW!

ال 52 كومينتر

A = [1 2 3 4 5  #=
  =# 6 7 8 9 10]

يعمل أيضًا ، ولا يتضمن تخصيص مصفوفة [5] إضافية مؤقتة. التعليقات متعددة الأسطر (# 69) FTW!

(على الرغم من أنني بصراحة لا أرى مشكلة في وجود 150 تعويمًا في سطر واحد. أليس لدى المحررين أشرطة تمرير أفقية هذه الأيام؟ إذا كان لديك مصفوفة 150 × 150 في التعليمات البرمجية ، فسيكون مجرد جدار من 22500 رقم على أي حال ، يبدو التمرير طريقة جيدة مثل أي طريقة للنظر إليه في التعليمات البرمجية الخاصة بك. يمكنك أيضًا تشغيل التفاف ناعم في المحرر إذا كنت تحب الأسطر القصيرة.)

لا أعرف ما إذا كانت النقطتان .. تستخدمان في بعض الأماكن ، لكنني أعتقد أنها مناسبة جدًا لاستمرار السطر ، أو \dots ( ) ، -- ، إلخ. توجد هنا مقارنة بين لغات مختلفة .

مرحبًا stevengj ،

ما زلت معتادًا على التفاف الكود الخاص بي في العمود 80. IMHO ، يصبح الرمز أكثر قابلية للقراءة وأسهل في العمل لأنه يمكنك تقسيم المحرر إلى جزأين وما زلت ترى كل الكود دون التمرير.

إلى جانب ذلك ، كل اللغات التي أتذكرها لديها آلية لاستمرار السطر. هذا حقا يحسن قراءة الكود في بعض المناسبات. أعتقد أن جوليا يجب أن تفعل ذلك أيضًا. بالطبع يمكنك أن تفعل كل شيء كما هو عليه اليوم ، ولكن مع هذه الميزة ، أعتقد أننا سنكون قادرين على الكتابة بشكل أكثر وضوحًا.

ألا يمكن للمحرر الخاص بك أن يقوم باللف الناعم في العمود 80 إذا كان هذا هو ما تفضله؟

(بالنسبة لمعظم لغة Julia ، يمكنك إدراج فواصل أسطر بدون اختراقات ، على سبيل المثال بعد أي أقواس أو فاصلة أو عامل تشغيل ثنائي. تعد المصفوفات الحرفية استثناءً نادرًا.)

تم بالفعل تحليل نقطتين (..) وعلامات حذف (...) كمعاملين ثنائيين ، وبشكل عام تكون العوامل أكثر فائدة من بناء جملة استمراري نادرًا ما يظهر (وهو ممكن بالفعل مع # = = #).

مرحبًا stevengj

أنا أستخدم vim (في الواقع neovim) ، يمكنني عمل التفاف ناعم ولكنه عادةً يكسر أشياء مثل مؤشرات الخطوط المتعددة ووحدات الماكرو. هذا هو السبب في أنني أفضل دائمًا كسر الخطوط.

ومع ذلك ، لا تتردد في إغلاق هذه المشكلة إذا كنت تعتقد أن هذه الميزة لا تعمل بشكل جيد مع تصميم لغة Julia.

أعتقد أن ما نريده حقًا هو شيء أكثر عمومية: طريقة لمواصلة أي سطر ، وليس خاصًا بصيغة المصفوفة. أفضل شيء تمكنت من التوصل إليه هو \ باعتباره آخر مسافة غير بيضاء على السطر ، والذي سيكون تغييرًا فاصلًا لأن هذا صالح حاليًا ولكنه بناء جملة غريب:

x = y \
    z

يمكننا حتى الاستمرار في دعم استخدام \ في السياقات التي لا تحتوي على مسافات بيضاء نظرًا لأن y z هو بناء جملة غير صالح ولكن من المحتمل أن يكون ذلك ذكيًا بعض الشيء. لست متأكدًا من أن هذا الأمر يستحق ذلك ولكن معظم اللغات لديها طريقة لمواصلة السطور. تعمل خدعة التعليق متعدد الأسطر أيضًا ولكنها مطولة قليلاً.

كسر جدا ...

julia> 2\
       10
5.0

julia> 2#=
       =#10
20

إنه بالتأكيد ينكسر لكنني سأفاجأ إذا تم استخدام \ هذا النحو في كثير من الأحيان.

ربما #\ ؟ بالتأكيد ، فإن ربط سلوك جديد بتعليق تم تجاهله سابقًا هو أيضًا كسر ، ولكن وجود #\ كتعليق ربما يكون أقل شيوعًا حتى من كسر السطر بعد \ (يُستخدم كعامل تشغيل).

إن حقيقة أن التعليقات متعددة الأسطر هي طريقة مطولة نسبيًا للقيام بذلك أمر جيد ، في رأيي ، لثني الناس عن استخدامها بشكل عرضي. Python لديها استمرار خط مائل عكسي ولكن يُنظر إليها الآن على أنها ميزة الملاذ الأخير . وبالمثل ، في الغالبية العظمى من بناء جملة Julia ، توجد بالفعل طريقة لإدراج فاصل سطر دون استخدام أي صيغة متابعة خاصة ، وينبغي تفضيل ذلك بشدة.

مرحبًا stevengj ،

لست متأكدًا من سبب عدم تشجيع الناس على استخدام فواصل الأسطر. انظر على سبيل المثال هذا الرمز:

            xndot = d2201 * sin(2ω + xli  - G22) +
                    d2211 * sin(   + xli  - G22) +
                    d3210 * sin(+ω + xli  - G32) -
                    d3222 * sin(-ω + xli  - G32) -
                    d5220 * sin(+ω + xli  - G52) +
                    d5232 * sin(-ω + xli  - G52) +
                    d4410 * sin(2ω + 2xli - G44) -
                    d4422 * sin(     2xli - G44) +
                    d5421 * sin(+ω + 2xli - G54) +
                    d5433 * sin(-ω + 2xli - G54)

IMHO ، علامة العملية في النهاية ليست جيدة مثل وجودهم في البداية:

            xndot = + d2201 * sin(2ω + xli  - G22) \
                    + d2211 * sin(   + xli  - G22) \
                    + d3210 * sin(+ω + xli  - G32) \
                    - d3222 * sin(-ω + xli  - G32) \
                    - d5220 * sin(+ω + xli  - G52) \
                    + d5232 * sin(-ω + xli  - G52) \
                    + d4410 * sin(2ω + 2xli - G44) \
                    - d4422 * sin(     2xli - G44) \
                    + d5421 * sin(+ω + 2xli - G54) \
                    + d5433 * sin(-ω + 2xli - G54)

إنه شعور طبيعي أكثر بالنسبة لي. مرة أخرى ، إنه تغيير تجميلي ، كل واحد سيكون له رأي مختلف حوله. السؤال هو: هل سيضر بأي شكل من الأشكال تصميم اللغة؟

يبدو أنه من الأسهل وضع زوج إضافي من أقواس التضمين في هذه الحالة.

نعم ، يمكن القيام بذلك. ولكن ، مرة أخرى IMHO ، هذا ليس شائعًا. لنفترض أن أحدهم رأى هذا:

            xndot = (+ d2201 * sin(2ω + xli  - G22)
                     + d2211 * sin(   + xli  - G22)
                     + d3210 * sin(+ω + xli  - G32)
                     - d3222 * sin(-ω + xli  - G32)
                     - d5220 * sin(+ω + xli  - G52)
                     + d5232 * sin(-ω + xli  - G52)
                     + d4410 * sin(2ω + 2xli - G44)
                     - d4422 * sin(     2xli - G44)
                     + d5421 * sin(+ω + 2xli - G54) 
                     + d5433 * sin(-ω + 2xli - G54))

من وجهة نظر رياضية ، هذه الأقواس ليس لها معنى. يمكن لشخص ما إزالتها عن غير قصد ، ولن تعرض جوليا أي تحذيرات ، وسيكون الرمز خاطئًا تمامًا.

أفضل شيء تمكنت من التوصل إليه هو \ باعتباره آخر مسافة غير بيضاء على السطر ، والذي سيكون بمثابة تغيير فاصل نظرًا لأن هذا صالح حاليًا ولكن بناء جملة غريب

ماذا عن استخدام # لنفس الغرض؟ التفسير هو أنك تعلق خارج فاصل السطر. (شكرًا oxinabox على طرح هذا التفسير لاستخدام LaTeX لـ % كتعليق / استمرار للسطر)

حسنًا ، من وجهة نظري ، يجب أن يكون # في نهاية السطر دون اتباع أي حرف لطيفًا جدًا ويبدو أنه يكسر أشياء أقل.

المشكلة الوحيدة المحتملة التي أراها هنا هي ذلك الانتقال من

a=1 #because reasons
 +2

إلى

a=1 #
 +2

ينتج نتائج مختلفة. ربما هذا لا يهم.

ماذا عن شيء لا تستخدمه جوليا مثل \\ ؟ هل هو قبيح جدا؟

أتوقع القيام بأسلوب اللاتكس "التعليق على الإعجاب الجديد" لكسر الأشياء.

ما لم يقتصر على # بدون أي مسافات غير بيضاء بعده.
على سبيل المثال:

colors = [ 0.5 0.2 0.1 0.9 # Red
                0.4 0.4 0.1 0.6 # Green
                0.1 0.2 0.1 0.1] # Blue

في LaTeX التي لا تحتوي على أي خطوط جديدة فيها.
كما أن وجود تعليق فارغ يتصرف بشكل مختلف عن التعليق غير الفارغ يبدو غريبًا.

لم أكن أقترح ذلك لجوليا بالفعل.
أعتقد أن \\ سيكون أقل إرباكًا.
لكني أعتقد أن حل stevengj لتعليق متعدد الأسطر قد يكون ألطف. إنه يعلق بشكل واضح للغاية على السطر الجديد

على الرغم من أن إنشاء حرفية متعددة الأسطر العملاقة تبدو مناسبة جدًا.
حتى أكثر من وجود قيم حرفية مقابل Array{T, 3} .

يجب أن يكون المرء قادرًا على بنائها بنفس الكفاءة باستخدام الأوامر vect و cat التي تنخفض إلى أي حال.

أعتقد أن الاقتراح كان أن يكون لديك # متبوعًا بحرف سطر جديد فقط (أو ربما مسافات فقط).

نعم ، قصدت القيام باقتراحStefanKarpinski للتعامل الخاص مع # في نهاية السطر ، وبالتأكيد لا يتم احتساب الحالة التي توجد فيها أشياء أخرى غير المسافات البيضاء بعد # . ربما كانت مقارنة LaTeX أكثر إرباكًا من توضيح ما كنت أحاول قوله.

يبدو أن اختيار # محفوف بالمخاطر بالنسبة لي. أحيانًا يكون لديّ # s مبعثرًا في الكود الخاص بي ، لأسباب لا أتذكرها تمامًا ، التعليقات التي غيرت رأيي بشأنها نوعًا ما ، إلخ. سيكون من السهل جدًا إزالة # قصد

أحيانًا أفتقد عامل تشغيل تابع للسطر ، لكنني أفضل أن يكون واضحًا جدًا ، مثل \ أو ... . يبدو أن #= أو [] يشبه إلى حد ما _trick_.

(إذا تم تثبيط الاستخدام ، فربما يكون هناك شيء قبيح بعض الشيء ، مثل \\\ سيعمل؟)

كما أنه من الطبيعي جدًا بالنسبة لي أن أضع التعليقات بعد عامل تشغيل تابع للسطر ، لذلك لا أرغب في الاعتماد على كونه آخر حرف غير مسافة بيضاء على السطر.

لست متأكدًا مما إذا كانت مستخدمة بالفعل في مكان آخر ، أو يجب أن تكون محجوزة لمشغلين خاصين بالمستخدم ، ولكن أحد أسهم Unicode هذه قد يوفر خيارات جذابة وبديهية لمتابعة السطر بشكل واضح:

أو أو

(يمكن الوصول إليه على سبيل المثال مع بعض الأسماء المستعارة ذات المعنى المكتمل بعلامة التبويب ، مثل \continueline )

أعتقد أنه من حسن الحظ أن #= =# يعمل من أجل هذا ويجب أن نتركه عند هذا الحد.

لا أوافق على أن وضع الشرطة المائلة للخلف في نهاية كل سطر أفضل بطريقة ما من إضافة الأقواس أو مجرد وضع العوامل في نهاية السطر. لا أعتقد أيضًا أن إساءة استخدام الشرطة المائلة العكسية أو # سيكون تحسنًا ؛ من شأنه أن يضيف مفاجآت فقط. إذا استخدمنا شيئًا متعدد الأحرف ، فلن يكون هناك تحسن كبير على #= =# .

لا أوافق على أن وضع الشرطة المائلة للخلف في نهاية كل سطر أفضل بطريقة ما من إضافة الأقواس أو مجرد وضع العوامل في نهاية السطر.

سبب فتح هذه المشكلة هو أن أيا من هؤلاء لا يعمل مع المصفوفات الحرفية. ومع ذلك ، أوافق على أنه ربما لا ينبغي لنا فعل أي شيء من أجل هذا لأن #= =# يعمل بالفعل.

الآن بعد أن رأيت أنه يمكنك استخدام #= =# لمتابعة السطر ، فمن المنطقي تمامًا. ومع ذلك ، إذا كنت صادقًا ، فأنا بالتأكيد لن أصل إلى هذا الاستنتاج بنفسي.

ربما تكون أفضل طريقة للمضي قدمًا هي إضافة شيء ما إلى الوثائق ودليل أسلوب جوليا الذي يقول إن استمرار السطر يمكن تحقيقه عبر #= =# .

فقط لإنهاء المناقشة ، JeffBezanson و @ StefanKarpinski ، هل تعتقد أنه حتى الاقتراح الذي اقترحه thchr ، والذي لن يكسر أي شيء ، ليس جيدًا ليتم تنفيذه؟ أعتقد أنه سيكون شيئًا لطيفًا مثل:

A = [1 2 3 4 5 ⤸
     6 7 8 9 10]

مطول أقل من #= =# وممتع بصريًا.

هذا يقرأ لطيف باعتراف الجميع. أحد الآثار الجانبية هو أن هذا من شأنه أن يعطي طريقة أساسية لطباعة التعليمات البرمجية بخطوط طويلة على عرض ثابت يتم عرضه بطريقة تجعل المخرجات رمزًا صالحًا.

ومع ذلك ، قمنا بالفعل بتحليل العديد من أسهم Unicode باعتبارها عوامل ثنائية.

أظن أننا يمكن أن نجني واحدة.

خيارات جيدة IMHO:

⤸ (2938) ↩ (8617) ↵ (8629) 

ربما حان الوقت لجعل المسافة البيضاء عامل تشغيل ، ويمكننا تحميلها بشكل زائد في سياقات المصفوفة الكبيرة باستخدام Cassette. لحسن الحظ ، قام Bjarne Stroustrup بالفعل بعمل التصميم الشاق لنا - http://www.stroustrup.com/whitespace98.pdf

إذا استخدمنا شيئًا متعدد الأحرف ، فلن يكون هناك تحسن كبير على #= =# .

أود أن أقدم ثلاث حجج ضد هذا.

أولاً ، يمكن اعتبار هذا تعليقًا خاطئًا. حتى لو كنت أعرف هذا ، فإن عقلي يسجل "تعليق".

ثانيًا ، عليك أن تضعه في سطرين ، وليس على سطر واحد فقط. (كيف سيتفاعل هذا مع المسافة البادئة؟)

ثالثًا ، إنها تركيبة أكثر تعقيدًا من ضغطات المفاتيح (على جهاز الكمبيوتر الخاص بي shift-3 shift-0 enter shift-0 shift-3 ). أعتقد أنه يمكن استخدام نوع من اختصارات لوحة المفاتيح. \\ النقيض من ذلك ، فإن enter .)

ثلاثة ونصف: IMHO يبدو محرجًا بعض الشيء ، ويشعر وكأنه خدعة.

حتى لو لم يتم قبول \\ لأنه ربما "محجوز" للاستخدام المستقبلي ، أعتقد حقًا أن اقتراح thchr يبدو لطيفًا جدًا . انظر كيف سيكون:

            xndot = + d2201 * sin(2ω + xli  - G22) ⤸
                    + d2211 * sin(   + xli  - G22) ⤸
                    + d3210 * sin(+ω + xli  - G32) ⤸
                    - d3222 * sin(-ω + xli  - G32) ⤸
                    - d5220 * sin(+ω + xli  - G52) ⤸
                    + d5232 * sin(-ω + xli  - G52) ⤸
                    + d4410 * sin(2ω + 2xli - G44) ⤸
                    - d4422 * sin(     2xli - G44) ⤸
                    + d5421 * sin(+ω + 2xli - G54) ⤸
                    + d5433 * sin(-ω + 2xli - G54)

وإلى جانب ذلك ، لن يضطر أحد لاستخدام هذا ولن يكسر أي شيء. لكنني متأكد من أنه ستكون هناك حالات استخدام جيدة لهذا (المصفوفات الكبيرة التي دفعتني إلى فتح هذه المشكلة واحدة):

pd = [
     1.09979E+00 -4.88060E-02 -1.97501E-01 -9.10280E-02 -6.96558E-03 ⤸ 
     2.42136E-02  3.91333E-01 -7.20068E-03 -3.22718E-02  1.41508E+00 ⤸
     1.68194E-01  1.85282E-02  1.09384E-01 -7.24282E+00  0.00000E+00 ⤸
     2.96377E-01 -4.97210E-02  1.04114E+02 -8.61108E-02 -7.29177E-04 ⤸
     1.48998E-06  1.08629E-03  0.00000E+00  0.00000E+00  8.31090E-02 ⤸
     1.12818E-01 -5.75005E-02 -1.29919E-02 -1.78849E-02 -2.86343E-06 ⤸
     0.00000E+00 -1.51187E+02 -6.65902E-03  0.00000E+00 -2.02069E-03 ⤸
     0.00000E+00  0.00000E+00  4.32264E-02 -2.80444E+01 -3.26789E-03 ⤸
     2.47461E-03  0.00000E+00  0.00000E+00  9.82100E-02  1.22714E-01 ⤸
    -3.96450E-02  0.00000E+00 -2.76489E-03  0.00000E+00  1.87723E-03 ⤸
    -8.09813E-03  4.34428E-05 -7.70932E-03  0.00000E+00 -2.28894E-03 ⤸
    -5.69070E-03 -5.22193E-03  6.00692E-03 -7.80434E+03 -3.48336E-03 ⤸
    -6.38362E-03 -1.82190E-03  0.00000E+00 -7.58976E+01 -2.17875E-02 ⤸
    -1.72524E-02 -9.06287E-03  0.00000E+00  2.44725E-02  8.66040E-02 ⤸
     1.05712E-01  3.02543E+04  0.00000E+00  0.00000E+00  0.00000E+00 ⤸
    -6.01364E+03 -5.64668E-03 -2.54157E-03  0.00000E+00  3.15611E+02 ⤸
    -5.69158E-03  0.00000E+00  0.00000E+00 -4.47216E-03 -4.49523E-03 ⤸
     4.64428E-03  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00 ⤸
     4.51236E-02  2.46520E-02  6.17794E-03  0.00000E+00  0.00000E+00 ⤸
    -3.62944E-01 -4.80022E-02 -7.57230E+01 -1.99656E-03  0.00000E+00 ⤸
    -5.18780E-03 -1.73990E-02 -9.03485E-03  7.48465E-03  1.53267E-02 ⤸
     1.06296E-02  1.18655E-02  2.55569E-03  1.69020E-03  3.51936E-02 ⤸
    -1.81242E-02  0.00000E+00 -1.00529E-01 -5.10574E-03  0.00000E+00 ⤸
     2.10228E-03  0.00000E+00  0.00000E+00 -1.73255E+02  5.07833E-01 ⤸
    -2.41408E-01  8.75414E-03  2.77527E-03 -8.90353E-05 -5.25148E+00 ⤸
    -5.83899E-03 -2.09122E-02 -9.63530E-03  9.77164E-03  4.07051E-03 ⤸
     2.53555E-04 -5.52875E+00 -3.55993E-01 -2.49231E-03  0.00000E+00 ⤸
     0.00000E+00  2.86026E+01  0.00000E+00  3.42722E-04  0.00000E+00 ⤸
     0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00 ⤸
     0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00;
     1.02315E+00 -1.59710E-01 -1.06630E-01 -1.77074E-02 -4.42726E-03 ⤸
     3.44803E-02  4.45613E-02 -3.33751E-02 -5.73598E-02  3.50360E-01 ⤸
     6.33053E-02  2.16221E-02  5.42577E-02 -5.74193E+00  0.00000E+00 ⤸
     1.90891E-01 -1.39194E-02  1.01102E+02  8.16363E-02  1.33717E-04 ⤸
     6.54403E-06  3.10295E-03  0.00000E+00  0.00000E+00  5.38205E-02 ⤸
     ...

بدلا من

pd = [
     1.09979E+00 -4.88060E-02 -1.97501E-01 -9.10280E-02 -6.96558E-03 #= 
 =#  2.42136E-02  3.91333E-01 -7.20068E-03 -3.22718E-02  1.41508E+00 #=
 =#  1.68194E-01  1.85282E-02  1.09384E-01 -7.24282E+00  0.00000E+00 #=
 =#  2.96377E-01 -4.97210E-02  1.04114E+02 -8.61108E-02 -7.29177E-04 #=
 =#  1.48998E-06  1.08629E-03  0.00000E+00  0.00000E+00  8.31090E-02 #=
 =#  1.12818E-01 -5.75005E-02 -1.29919E-02 -1.78849E-02 -2.86343E-06 #=
 =#  0.00000E+00 -1.51187E+02 -6.65902E-03  0.00000E+00 -2.02069E-03 #=
 =#  0.00000E+00  0.00000E+00  4.32264E-02 -2.80444E+01 -3.26789E-03 #=
 =#  2.47461E-03  0.00000E+00  0.00000E+00  9.82100E-02  1.22714E-01 #=
 =# -3.96450E-02  0.00000E+00 -2.76489E-03  0.00000E+00  1.87723E-03 #=
 =# -8.09813E-03  4.34428E-05 -7.70932E-03  0.00000E+00 -2.28894E-03 #=
 =# -5.69070E-03 -5.22193E-03  6.00692E-03 -7.80434E+03 -3.48336E-03 #=
 =# -6.38362E-03 -1.82190E-03  0.00000E+00 -7.58976E+01 -2.17875E-02 #=
 =# -1.72524E-02 -9.06287E-03  0.00000E+00  2.44725E-02  8.66040E-02 #=
 =#  1.05712E-01  3.02543E+04  0.00000E+00  0.00000E+00  0.00000E+00 #=
 =# -6.01364E+03 -5.64668E-03 -2.54157E-03  0.00000E+00  3.15611E+02 #=
 =# -5.69158E-03  0.00000E+00  0.00000E+00 -4.47216E-03 -4.49523E-03 #=
 =#  4.64428E-03  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00 #=
 =#  4.51236E-02  2.46520E-02  6.17794E-03  0.00000E+00  0.00000E+00 #=
 =# -3.62944E-01 -4.80022E-02 -7.57230E+01 -1.99656E-03  0.00000E+00 #=
 =# -5.18780E-03 -1.73990E-02 -9.03485E-03  7.48465E-03  1.53267E-02 #=
 =#  1.06296E-02  1.18655E-02  2.55569E-03  1.69020E-03  3.51936E-02 #=
 =# -1.81242E-02  0.00000E+00 -1.00529E-01 -5.10574E-03  0.00000E+00 #=
 =#  2.10228E-03  0.00000E+00  0.00000E+00 -1.73255E+02  5.07833E-01 #=
 =# -2.41408E-01  8.75414E-03  2.77527E-03 -8.90353E-05 -5.25148E+00 #=
 =# -5.83899E-03 -2.09122E-02 -9.63530E-03  9.77164E-03  4.07051E-03 #=
 =#  2.53555E-04 -5.52875E+00 -3.55993E-01 -2.49231E-03  0.00000E+00 #=
 =#  0.00000E+00  2.86026E+01  0.00000E+00  3.42722E-04  0.00000E+00 #=
 =#  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00 #=
 =#  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00;
     1.02315E+00 -1.59710E-01 -1.06630E-01 -1.77074E-02 -4.42726E-03 #=
 =#  3.44803E-02  4.45613E-02 -3.33751E-02 -5.73598E-02  3.50360E-01 #=
 =#  6.33053E-02  2.16221E-02  5.42577E-02 -5.74193E+00  0.00000E+00 #=
 =#  1.90891E-01 -1.39194E-02  1.01102E+02  8.16363E-02  1.33717E-04 #=
 =#  6.54403E-06  3.10295E-03  0.00000E+00  0.00000E+00  5.38205E-02 #=
     ...

لدرجة أن جدارًا من الأرقام مثل هذا يمكن أن "يبدو لطيفًا" ، يبدو من الأجمل بالنسبة لي أن أضع كل صف في سطر واحد. بهذه الطريقة على الأقل يمكنني معرفة عدد الصفوف التي تحتويها المصفوفة ، وما إذا كانت الصفوف لها نفس الطول.

pd = [ 1.09979E+00 -4.88060E-02 -1.97501E-01 -9.10280E-02 -6.96558E-03 2.42136E-02  3.91333E-01 -7.20068E-03 -3.22718E-02  1.41508E+00 1.68194E-01  1.85282E-02  1.09384E-01 -7.24282E+00  0.00000E+00 2.96377E-01 -4.97210E-02  1.04114E+02 -8.61108E-02 -7.29177E-04 1.48998E-06  1.08629E-03  0.00000E+00  0.00000E+00  8.31090E-02 1.12818E-01 -5.75005E-02 -1.29919E-02 -1.78849E-02 -2.86343E-06 0.00000E+00 -1.51187E+02 -6.65902E-03  0.00000E+00 -2.02069E-03 0.00000E+00  0.00000E+00  4.32264E-02 -2.80444E+01 -3.26789E-03 2.47461E-03  0.00000E+00  0.00000E+00  9.82100E-02  1.22714E-01 -3.96450E-02  0.00000E+00 -2.76489E-03  0.00000E+00  1.87723E-03 -8.09813E-03  4.34428E-05 -7.70932E-03  0.00000E+00 -2.28894E-03 -5.69070E-03 -5.22193E-03  6.00692E-03 -7.80434E+03 -3.48336E-03 -6.38362E-03 -1.82190E-03  0.00000E+00 -7.58976E+01 -2.17875E-02 -1.72524E-02 -9.06287E-03  0.00000E+00  2.44725E-02  8.66040E-02 1.05712E-01  3.02543E+04  0.00000E+00  0.00000E+00  0.00000E+00 -6.01364E+03 -5.64668E-03 -2.54157E-03  0.00000E+00  3.15611E+02 -5.69158E-03  0.00000E+00  0.00000E+00 -4.47216E-03 -4.49523E-03 4.64428E-03  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00 4.51236E-02  2.46520E-02  6.17794E-03  0.00000E+00  0.00000E+00 -3.62944E-01 -4.80022E-02 -7.57230E+01 -1.99656E-03  0.00000E+00 -5.18780E-03 -1.73990E-02 -9.03485E-03  7.48465E-03  1.53267E-02 1.06296E-02  1.18655E-02  2.55569E-03  1.69020E-03  3.51936E-02 -1.81242E-02  0.00000E+00 -1.00529E-01 -5.10574E-03  0.00000E+00 2.10228E-03  0.00000E+00  0.00000E+00 -1.73255E+02  5.07833E-01 -2.41408E-01  8.75414E-03  2.77527E-03 -8.90353E-05 -5.25148E+00 -5.83899E-03 -2.09122E-02 -9.63530E-03  9.77164E-03  4.07051E-03 2.53555E-04 -5.52875E+00 -3.55993E-01 -2.49231E-03  0.00000E+00 0.00000E+00  2.86026E+01  0.00000E+00  3.42722E-04  0.00000E+00 0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00 0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00
       1.02315E+00 -1.59710E-01 -1.06630E-01 -1.77074E-02 -4.42726E-03 3.44803E-02  4.45613E-02 -3.33751E-02 -5.73598E-02  3.50360E-01 6.33053E-02  2.16221E-02  5.42577E-02 -5.74193E+00  0.00000E+00 1.90891E-01 -1.39194E-02  1.01102E+02  8.16363E-02  1.33717E-04 6.54403E-06  3.10295E-03  0.00000E+00  0.00000E+00  5.38205E-02 ...
       ...

أعتقد أنه من الرائع وجود طريقة واحدة واضحة لكتابة التعبيرات التي تعبر خطوطًا متعددة لأن الاتساق عبر النظام البيئي أكثر أهمية من المرونة في هذا النوع من التنسيق.

وهذا يشير إلى أننا ترك الأمور كما هي، باستثناء شيء واحد: في سياقات حيث بيضاء غير هامة (وحدات الماكرو، ولكن أيضا بناء المصفوفة) هناك حاليا الصفر بطرق واضحة لمواصلة خطوط. اختراق التعليق متعدد الأسطر ذكي ، ولكنه قبيح أيضًا ، IMO.

يمكننا حل كلا الأمرين مرة واحدة عن طريق إضافة استمرار سطر صالح فقط في سياقات التحليل space-sensitive :

# Valid - space sensitive context
<strong i="10">@info</strong> "A message which could be rather long"  ⤸
      my_variable my_variable2                ⤸
      some_other_variable

# Invalid - there should only be one way to do this
x = some_variable ⤸
    + other_variable
# Valid - the current, perfectly good convention for writing this
x = some_variable +
    other_variable

لقد قمت بتطبيق unicode ⤸ لمتابعة السطر في الفرع cjf/line-continuation . هذه نسخة أبسط لا تقتصر على السياقات الحساسة للمساحة ولكن يجب أن يكون ذلك سهلاً مع القليل من إعادة الترتيب.

سيكون من الجيد حقًا أن يكون لديك فصل مشترك صريح بين متابعة الصف . سيحل مشكلة OP ويعزز قابلية قراءة تعبيرات المصفوفة بالصيغ. مثال وهمي باستخدام | ،

       [ x .+ 1 | 3*(x .+ 2) |
        12 + x | -x ]

لماذا قد تكون هناك حاجة إلى أكثر من حرف متابعة سطر واحد؟

من أجل الحصول على عرض ملموس ، قمت بعمل علاقات عامة لهذا - انظر # 29273

@ c42f ، IMHO ، أعتقد أنه سيكون من المربك إلى حد ما السماح بسطر استمرار الحرف في مناسبات محددة فقط. لماذا لا نجعلها عالمية؟

ستيفان: لسهولة القراءة فقط. هذا من شأنه أن يقترح فقط السماح لأحرف متابعة السطر داخل السطر للتأكيد وفصل المجال في سياق منفصل بمسافات بيضاء.

ronisbr حقيقة أن هناك طريقة واحدة واضحة لمواصلة السطور في معظم التعبيرات مثل

x = a +
    b +
    c

هي بالأحرى جذابة بالنسبة لي ولم أرغب في تغيير ذلك.

السماح لكتابة هذا أيضًا باسم

x =   a  ⤸
    + b  ⤸
    + c

يقدم فقط IMO الاختلاف غير الضروري.

اللغة لديها بالفعل مفهوم السياقات "الحساسة للمساحة" حيث تختلف قواعد التحليل ، وهذه الفتحات بدقة هناك.

اهلا ياجماعة!

الآن بعد أن أصبح لدينا 1.1 ، هل يمكننا مناقشة هذه الميزة لـ 1.2؟ على الأقل ، هل يمكننا تحديد ما إذا كان هذا سيصبح في النهاية ميزة جديدة أم يجب إغلاق هذه المشكلة؟

ccJeffBezanson ، المعروف أيضًا باسم قيصر النحو.

بعد أن وجدت التعليقات متعددة الأسطر على النحو الذي اقترحه stevengj مناسبة تمامًا لهذا الغرض (وبشكل عام) ، أتساءل عما إذا كان بإمكاننا فقط ذكر هذا في الدليل وبالتالي حل المشكلة دون أي تغيير في اللغة. إذا كانت الإجابة بنعم ، فسأكون سعيدًا بتقديم علاقات عامة في الأماكن ذات الصلة (واحدة للمصفوفات ، وواحدة كنصيحة عامة).

أدرك أن بعض اللغات لها بناء جملة خاص لهذا ، وهذا مفيد في بعض الأحيان. ومع ذلك ، لا أعتقد أن كتابة سطور طويلة جدًا أو تضمين مصفوفات حرفية كبيرة في المصدر يجب أن تصبح عادة تشجعها اللغة ، وليس شيئًا لدينا فقط بعض الدعم في الحالة النادرة التي نحتاجها.

أوافق على أن حالة التفاف المصفوفة متعددة الأسطر غير معتادة بدرجة كافية ليتم تغطيتها باستخدام #= =# وسيكون من المفيد توثيق هذا الخيار لاستمرار السطر. بالنسبة لاستدعاءات الماكرو متعددة الأسطر ، أستخدم بناء الجملة هذا ، لكنني ما زلت أجده قبيحًا ومرهقًا.

بالنسبة إلى مكالمات الماكرو متعددة الخطوط ، يمكنك استخدام الأقواس.

أنا على دراية جيدة بخيار استخدام الأقواس لوحدات الماكرو ولكني أجده غير مرضي كما وصفته من قبل. وبالتحديد ، فإن استخدام الأقواس والفواصل يجعل استدعاء الماكرو متميزًا جدًا بصريًا عن الطريقة التي "تبدو بها وحدات الماكرو عادةً" في معظم رموز Juila. من الصعب قراءة الكود الذي يبدو مختلفًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات