J @ لا يعمل كما هو متوقع
-
21-08-2019 - |
سؤال
وأنا بدأت للتو في محاولة لالتقاط لغة J، وأنا في حيرة من ما يلي:
1 2 +/@{ i.4
1 2
+/ 1 2 { i.4
3
وعندما تكون في وثائق @ تقول: "س ش ص @ الخامس ↔ ش س ت ذ"
وأفترض أنا فقط ظنا جزء واحد من خطاب لآخر، ولكن لا يمكن معرفة ذلك
وأيضا، كيف يمكنني معرفة ما نوع الكلام هو الاسم؟
المحلول
NB. u b. 0 returns the rank of u NB. the rank of a verb determines the arguments it applies to at a time NB. monadic + y applies to atoms; dyadic x + y applies to pairs of atoms + b. 0 0 0 0 NB. monadic +/ y and dyadic x +/ y apply to anything (unbounded rank) +/ b. 0 _ _ _ NB. monadic { y applies to arrays of atoms; NB. dyadic x { y applies to pairs of atoms and anything { b. 0 1 0 _ NB. u @ v has the rank of v +/@{ b. 0 1 0 _ NB. since 1 2 { i.4 returns atoms at a time, +/ works on atoms +/"0 [ 1 2 { i.4 1 2 NB. u @: v has unbounded rank +/@:{ b. 0 _ _ _ NB. +/ applies to all of 1 2 { i.4 at once +/"_ [ 1 2 { i.4 3 NB. mechanical translation to tacit form 13 : '+/ x { y' [: +/ {
نصائح أخرى
ويكيبيديا لديها، في رأيي منحازة، وwriteup لائق على رتبة، وماذا يعني في سياق أجزاء مختلفة من "خطاب" في J.
ولكن للإجابة على السؤال الأصلي، يمكن منشأة أثر J سيكون مفيدا لفهم الكيفية التي يعمل قواعدها:
require'trace'
trace '1 2 +/@{ i.4'
وهذا سوف يأخذك خطوة خطوة من خلال عملية التوزيع، والتي تبين الكلمات التي يستهلكها كل قاعدة الإنتاج ونتيجة يولد كل منهما.
وآه، وأعتقد أنني قد حظيت بها، ولست بحاجة لاستخدام @: بدلا من @
1 2 +/@:{ i.4
3
وهذا ما أردت. اعتقد انا ذاهب لدينا لقراءة بعض أكثر على رتبة، وهذا هو الفرق الوحيد بين @ و @: