APL היא הבסיס או השפיעה באופן ניכר על שפת תכנות אחרות:
תכונות השפה.
מערכת תווים.
מערכת התווים הייחודית והלא מוכרת של APL הייתה עבורה מקור לביקורת ושבח כאחד. התופעה שמתכנתים שלומדים ומסתגלים אליה הופכים לחסידים נלהבים שלה יכולה לרמוז שאכן קיים משקל מהותי לסימון המתמטי המקורי של אייברסון וזהו חלק בלתי נפרד מהשפה. בשנות ה־60 וה־70 מעט מסופים יכלו להציג את הסימנים של APL. הפופולריים ביניהם ניצלו את התמיכה של מכונת הכתיבה IBM Selectric בעזרת החלפת ראש ההדפסה. המסוף הראשון שידע להציג את כל התווים של APL היה מסוף החד־שורה TI Model 745 של Texas Instruments שהושק ב־1977.
עם הופעת הצגים הגרפיים, המדפסות, וקידוד ה־Unicode, בעיית התווים של APL כמעט נעלמה. עם זאת, כתיבת APL עדיין דורשת עורכי טקסט שתומכים בשיטת קלט ייחודית לה, מיפוי מקלדות, לעיתים שימוש במקלדת וירטואלית, או הדבקת תווים מודפסים על גבי המקלדת, פתרונות מתסכלים עבור מתכנתים עם רקע משפות תכנות אחרות. אצל מתחילים שאין להם רקע קודם בתכנות, מחקר שנוסה על תלמידי תיכון הראה שכתיבת תווי APL לא הפריעה לתלמידים לתכנת באופן ניכר.
טענה לטובת השימוש ב־APL היא שהכתיבה בה דורשת פחות הקלדה, ושמתכנתים משננים את מפת התווים שלה עם הזמן. כמו כן, מקלדות ייעודיות ל־APL מיוצרות כיום ונמצאות בשימוש, גופנים ייעודיים ל־APL זמינים להורדה עבור מערכות הפעלה כמו חלונות ולינוקס.
עיצוב.
בניגוד לשאר השפות המובנות, קוד טיפוסי של APL בדרך כלל בנוי כשירשור של אופרטורים, פונקציות "מונאדיות" ו"דיאדיות" (המונחים של APL עבור פעולות אונאריות ובינאריות) על/בין מערכים. ל־APL קיימים פרימיטיבים (המונח של APL לפונקציות ופעולות המובנות בשפה) רבים המתוארים על ידי סימן בודד או הרכבה של מספר סימנים. לכל הפרימיטיבים ב־APL יש קדימות שווה, והם אסוציאטיביים עם קדימות לימין. כתוצאה מכך, הבנת הקוד ב־APL נוחה יותר בקריאה מימין לשמאל.
מימושים מוקדמים של APL (בסביבות שנות ה־70) לא כללו בקרת זרימה, כגון codice_2, codice_3 או מבני קוד מהצורה codice_4. APL עודדה הפעלת פונקציות על פני מערכים שלמים, דבר שפטר את המתכנת מהצורך לכתוב קוד מובנה עם בקרת זרימה מפורשת. לדוגמה הפונקציה codice_5 (בסימונו של אייברסון: codice_6) יכלה להחליף איטרציה של לולאת codice_7: codice_8 כאשר N הוא סקלר חיובי ושלם תחזיר מערך חד־ממדי מהצורה formula_1. מימושי APL חדשים יותר כוללים בקרת זרימה ומבני קוד מקיפים המאפשרים הפרדה ברורה בין בקרת הזרימה של התהליכים למבני הנתונים.
סביבת התכנות של APL נקראת "workspace" (עברית: "סביבת עבודה"). בסביבת עבודה משתמש יכול להגדיר משתנים עבור נתונים ושגרות עבור תהליכים ב־APL. המשתמש יכול לבצע פעולות על המשתנים תוך שימוש במפרש כמו בשפת תסריט. בדוגמאות למטה, המפרש מזין 6 רווחים בתחילת השורה לפני קבלת הקלט מהמשתמש, ומדפיס פלט בהתאם.
המשתמש יכול לשמור את סביבת העבודה יחד עם כל המשתנים והשגרות שהגדיר בה, ולהקפיא את מצב הריצה הנוכחי שלה.
APL משתמשת בסימנים שאינם כלולים ב־ASCII. הסימנים גם מרחיבים את הסימון המקובל באלגברה ובפעולות חשבון בסיסיות. היכולת לבטא פעולות המטפלות בריבוי נתונים (SIMD) על גבי מערכים בעזרת תו ייחודי בודד מאפשרת לנסח אלגוריתמים כמו משחק החיים בשורה אחת בלבד. תאורטית, ברוב הגרסאות של APL, ניתן לבטא כל פונקציה בעזרת ביטוי בודד, כלומר בשורה אחת.
כדי לכתוב את הסימנים המיוחדים של APL, מתכנתים נוהגים להשתמש במקלדות ייעודיות עם מקשים שעליהם מוצגים הסימנים. אף על פי שיש מספר דרכים לכתוב קוד ב־APL בעזרת תווי ASCII, אין זה מקובל בפועל (עובדה זו יכולה לתמוך בתזה של אייברסון - "סימון ככלי חשיבה"). רוב המימושים המודרניים משתמשים בפריסה הסטנדרטית של המקלדות, עם שיטת קלט הממפה את המקשים לתווים הייחודיים של APL. היסטורית, הגופן של APL התאפיין באותיות אלפביתיות גדולות בכתב נטוי, וכתב ישר עבור המספרים והסימנים. רוב המימושים עדיין מספקים גופנים ייעודיים כדי להציג קוד APL.
חסידי השפה מתמודדים עם הטענה שהסימון של APL הפך אותה לשפת "כתיבה בלבד" (באנגלית: "write-only language", ביטוי לעגני לשפת תכנות לא מובנת, שקשה לקרוא ולהבין קוד מקור שנכתב בהן. הביטוי נגזר מניגוד של המונח "קבצים לקריאה בלבד" המוגנים מכתיבה במערכת), בכך שקוד בלתי קריא הוא ברוב המקרים תוצאה של חוסר מיומנות של המתכנת, או טעויות של מתכנתים מתחילים שאינם בקיאים באופן הכתיבה המקובל והאופייני לשפה, דבר שיכול לקרות בכל שפה. יתר על כך, נטען כי APL מאפשרת לכתוב קוד הרבה יותר מתומצת שדורש פחות זמן גם בכתיבה וגם בעיון, ובסופו של דבר חוסך בזמן ובמתכנתים.
טיעון נוסף הוא כי מאחר שהשפה היא מאוד תמציתית, היא מתאימה יותר לפיתוח תוכנות בקנה מידה גדול, כיוון שהיא מאפשרת הקטנה ניכרת של מספר שורות הקוד. מתכנתי APL רואים שפות אחרות כגון Java ו־COBOL כמסורבלות וטרחניות. APL אכן נפוצה במקומות שבהם לזמן הפיתוח יש חשיבות קריטית מהיבט עסקי, כמו במערכות מסחר אלגוריתמיות ואוטומטיות.
מינוח.
APL עושה הבדלה ברורה בין פונקציות (שגרות) ואופרטורים (פעולות). פונקציות מקבלות מערכים (מתוך משתנים, קבועים, או ביטויים) כפרמטרים, בזמן שאופרטורים (בדומה לשפות פונקציונליות) יכולים לקבל כפרמטרים גם פונקציות וגם מערכים ולהחזיר פונקציה חדשה משילוב של פונקציות ופעולות קיימות. לדוגמה פונקציית סיכום מערכים ב־APL נוצרת מהחלת פונקציית החיבור (codice_9) בעזרת אופרטור הצמצום (ב־APL מילולית: "reduction" או בסימון המתמטי של אייברסון codice_10) על מערך. אופרטור הצמצום מפעיל את הגורם משמאל, במקרה זה: פונקציית החיבור, בין כל שני פריטים בתוך המערך שנמצא מימין, ובכך מביא לחיבור של כל הפריטים בתוכו ומחזיר את סכומם. כדוגמה נוספת, הפעלת פונקציית המקסימום (codice_11, המחזירה את הערך הגדול מהשניים) בעזרת פעולת הצמצום (codice_10) על גבי מערך תפעיל את הפונקציה בין כל שני פריטים בתוכו ובכך תחזיר את הערך הגדול מכל הפריטים בו. מאוחר יותר בשפת J, אייברסון שינה את המינוח ל־"פוֹעַל" (באנגלית: "verb") עבור פונקציות; ול־"תואר פועל" או ל־"מילת חיבור" (באנגלית: "adverb" או "conjunction") עבור אופרטורים.
חלוקה זאת היא חלק בלתי נפרד מהשפה עצמה, ורוב הפרימיטיבים שלה גם מתחלקים לשתי הקטגוריות האלה, למעט מספר מועט של חריגים שאינם פונקציות ואינם אופרטורים, כגון פעולת ההשמה (codice_13). כתיבת קוד חדש ב־APL היא לרוב פיתוח פונקציות חדשות, ורק לעיתים רחוקות אופרטורים חדשים.
מונחים מסוימים ב־APL לעיתים אינם תואמים את השימוש הנהוג בהם בספרות הקשורה למתמטיקה ובכלל במדעי המחשב.
דוגמאות.
"Hello World".
הדפסת השורה "Hello World" ב־APL תעשה כך:
'Hello, world!'
ב־APL מקובל להגדיר פעולות ברירת מחדל במקרים שבהם לא מצוינת אף פעולה או פונקציה אחרת. המחרוזת codice_14 מודפסת כפלט מכיוון שפעולת ברירת המחדל ב־APL היא הדפסת פלט.
העלאה בחזקה.
העלאה בחזקה ב־APL נעשית בעזרת הפונקציה codice_15 כך: codice_16, כלומר 2 בחזקת 3 (זה יכתב כ־codice_17 במספר שפות אחרות, וכ־codice_18 בשפות כמו פייתון ו־Fortran). עם זאת, במקרה שלא צוין בסיס (כגון codice_19), APL תניח שהבסיס הוא הקבוע e (...2.71828), ולכן codice_19 יהיה שקול ל־codice_21.
סטטיסטיקה פשוטה.
נניח ש־codice_22 הוא מערך מספרים, אז הביטוי codice_23 מחזיר את הממוצע החשבוני שלהם. בקריאה מימין לשמאל (כפי שהקדימות ב־APL עובדת), codice_24 נותן את מספר הפריטים במערך X, ומאחר ש־codice_25 היא פעולה דיאדית (בינארית), הערכה מלאה של הביטוי משמאל דרושה לפני הפעלתה. הביטוי משמאל מוקף בסוגריים כי אחרת X לבדו יילקח כפרמטר לפני פעולת הסיכום codice_26 המחברת כל הפריטים בתוך X. בהתבסס על זה, הביטוי codice_27 מחשב את סטיית התקן. יתר על כן, מאחר שהשמה למשתנה (codice_13) נחשבת לפעולה, ניתן להשתמש בה בתוך הקוד גם כן ולקבל:
SD←((+/((X - AV←(T←+/X)÷⍴X)*2))÷⍴X)*0.5
דבר שיאפשר שימוש חוזר במשתנים codice_29, codice_30, ו־codice_31. באופן שגרתי, מתכנת APL יגדיר את הביטוי כפונקציה במקום לכתוב אותו כל פעם מחדש.
בחירת 6 מספרים להגרלה.
הביטוי הבא מציג דוגמה לבחירת 6 מספרים שלמים פסודו־אקראיים להגרלה הנעים בין 1 ל־40, שאינם חוזרים על עצמם, ומדפיס אותם בסדר עולה.
x[⍋x←6?40]
הקוד התמציתי לעיל משלב את הפונקציות הבאות:
מאחר שלא צוינה אף פונקציה משמאל ל־codice_35 שתנחה מה לעשות עם הפלט, המפרש פשוט ידפיס אותו בשורה אחת כשכל פריט במערך מופרד ברווח בלי הנחיה נוספת.
הפונקציה codice_32 יכולה גם להיות מונאדית (כלומר אונארית, במקרה זה היא מכונה "roll" באנגלית), ואז היא תחזיר מספר אקראי בודד לפי טווח הפרמטר שמשמאל. לדוגמה codice_42 תחזיר מספר אקראי בין 1 ל־20.
מספרים ראשוניים.
הביטוי הבא יחשב את כל המספרים הראשוניים מ־1 עד R. סיבוכיות החישוב תהיה formula_2 גם בזמן הריצה וגם בצריכת הזיכרון.
(~R∊R∘.×R)/R←1↓ιR
הביטוי מפורש מימין לשמאל כך:
formula_5
מיון.
הדוגמה הבאה תמיין מערך מחרוזות בסדר עולה לפי מספר התווים בכל מחרוזת.
X[⍋X+.≠' ';]
משחק החיים.
הפונקציה הבאה (codice_74), כתובה ב־Dyalog APL, לוקחת מטריצה בוליאנית ומחשבת את הצעד הבא לפי האלגוריתם של משחק החיים. הדוגמה הזאת מפגינה את היכולת של APL לבטא תהליכים מורכבים במעט קוד. עם זאת היא קשה להבנה ללא ידע מתקדם ב־APL.
הסרת תגי HTML.