الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أفكار McCarthy التي غيرت البرمجة ...

بدأه مصطفى 36a2 في 22 ديسمبر 2012 · 12 رد · 1,236 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

أثناء قراءة أحد المقالات عن أفكار لغة LISP التي جددت مفهوم البرمجة بشكل كبير ...

(لغة LISP من أوائل لغات البرمجة جاءت بعد Fortran وهي من اختراع john McCarthy ..1950..شكلت ثورة في عالم البرمجة

ولا يزال تطويرها قائما حتى الآن ...(تجاوزت 9 نسخ حتى وصلت إلى أقل قدر ممكن من تعقيد التركيب النحوي)

حتى أنه يقال على سبيل التقدير للغة :

لم يعد هناك داع لتطالب بلغة برمجة جديدة ... اطلب لهجة جديدة من لغة LISP )

رأيت أن إدراجها هنا ومناقشتها فيه فائدة ...

أفكار McCarthy التي غيرت البرمجة يمكن تلخيصها في 9 أفكار

فيما يلي تعدادها مع تلخيص بسيط جدا لها ..

1. Conditionals

أول من أدخل الجمل الشرطية إلى البرمجة حيث كانت FORTRANقبلها لا تحوي إلا علىgoto للتحكم بسير البرنامج

2. A function type.

صار التابع يعتبر نوعاً يمكن التعامل معه كباقي الأنواع وهذا ما نعبر عنه حاليا

بالمؤشر إلى تابع ...

3. Recursion.

مفهوم العودية برمجياً ...(طبعا كان موجود رياضيا قبل ذلك )

4. A new concept of variables.

كل المتغيرات هي مؤشرات ..فمثلا عملية الإسناد ليست نسخ المحتوى من متحول آخر

بل نسخ عنوان القيمة من مؤشر لآخر

فصار المتحول اسمه place بصفته ال يهمنا الا المكان الذي يشير اليه

5. Garbage-collection.

طالما تحدثنا عن المؤشرات يجب التحدث عن الذاكرة وإدارة الذاكرة دون اقحام المبرمج في الأمر

6. Programs composed of expressions.

هل تظن أن المعامل الشرطي الثلاثي صناعة محلية ؟

إنه من اختراع McCarthy بجدارة منقطعة النظير

(x?1:2)

العبارة السابقة كان يعبر عنها ب:

(if x 1 2)

البرنامج مبني كشجرة من العبارات الرياضية والمkنطقية ..كل عبارة تعوض بناتجها ...

مثلا

للتعبير عن الشرط التالي :

(foo?x==1:x==2)

يمكننا كتابته كما يلي

(if foo (= x 1) (= x 2))

لاحظ الآن اخراج الشرط كعامل مشترك

ويمكن التعبير عنه كما يلي

(= x (if foo 1 2))

والتي تكافئ بالنسبة لنا :

(x==(foo?1:2))

أليست رائعة

7. A symbol type

اي وجود نوع خاص للسلاسل النصية

وهذه السلاسل يمكن أن تتضمن أي شيء بدئا من ثوابت رياضية مثل PI أو e وانتهاءا بأسماء الأشخاص

8. A notation for code.

ترميز الكود وطريقة كتابته تعتمد على شجرة العمليات وليست كتابة كلمات انكليزية كمافي سابقاتها

نصل إلى الفكرة الأخيرة

9. The whole language always available.

أترك لكم قراءتها من النص الأصلي ...كوني لم أستطع شرحهاblush.gif

..وننتظر شرحها من أحد الأعضاء مشكوراً لمناقشتها

اقتباس

9. The whole language always available.

There is no real distinction between read-time, compile-time, and runtime.

You can compile or run code while reading,

read or run code while compiling,

and read or compile code at runtime.

Running code at read-time lets users reprogram Lisp's syntax;

running code at compile-time is the basis of macros;

compiling at runtime is the basis of Lisp's use as an extension language in programs like Emacs;

and reading at runtime enables programs to communicate using s-expressions,an idea recently reinvented as XML.

والله ولي التوفيق

3
#2

جزاك الله خيرا على هذه المعلومات

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#3

موضوع جميل و لكن عندى استفسار انت تقول

مصطفى 36a2 كتب:

(لغة LISP من أوائل لغات البرمجة جاءت بعد Fortran وهي من اختراع john McCarthy ..1950..شكلت ثورة في عالم البرمجة

ولا يزال تطويرها قائما حتى الآن ...(تجاوزت 9 نسخ حتى وصلت إلى أقل قدر ممكن من تعقيد التركيب النحوي)

كيف لا يزال تطويرها قائما و نحن لا نسمع عنها ؟؟!! او لا نسمع عنها كثيرا قهى ليست من ضمن اللغات المشهورة مثل java و c , vb.net ؟؟ :blush:

ردك على مواضيعى بالنقد او الشكر يساعدنى على اعطاء المزيد اما ان تقرا و تاخذ المعلومة التى تريدها و ترحل سيؤدى الى عدم الاجابة مرة اخرى و عدم طرح اى مواضيع فساعدونى حتى نرتقى بالمنتدى ولو بكلمة "شكرا"

سبحانك الله و بحمدك عدد خلقك و رضى نفسك و زنة عرشك ومداد كلماتك

#4
اقتباس
كيف لا يزال تطويرها قائما و نحن لا نسمع عنها ؟؟!!

سمعت بها الآن laugh.gif

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

بالتوفيق

#5

Lisp لغة لامثيل لها بحال!

اقتباس

2. A function type.

صار التابع يعتبر نوعاً يمكن التعامل معه كباقي الأنواع وهذا ما نعبر عنه حاليا

بالمؤشر إلى تابع ...

المقصود هو التعامل مع الدوال بأنها أنواع بيانات من الدرجة الأولى يمكن تمريرها بسهولة بين الدوال وبعضها

اقتباس

7. A symbol type

اي وجود نوع خاص للسلاسل النصية

وهذه السلاسل يمكن أن تتضمن أي شيء بدئا من ثوابت رياضية مثل PI أو e وانتهاءا بأسماء الأشخاص

يوجد خلط كبير بخصوص ال symbol ... ال symbol هي string قائم بذاته في أبسط صورة على سبيل المثال كما في اللغات التي تدعم ال enumerations

RED, BLUE, GREEN فهي قيمة مجردة لايوجد ابسط منها (هي كذلك في روبي) للتعبير عن محتوى ما وكذلك يمكن أن يحوي قيم كذلك

اقتباس

.

There is no real distinction between read-time, compile-time, and runtime.

You can compile or run code while reading,

read or run code while compiling,

and read or compile code at runtime.

Running code at read-time lets users reprogram Lisp's syntax;

running code at compile-time is the basis of macros;

compiling at runtime is the basis of Lisp's use as an extension language in programs like Emacs;

and reading at runtime enables programs to communicate using s-expressions,an idea recently reinvented as XML.

lisp لغة تستطيع أن تبرمجها/تعيد برمجتها كما تشاء (ابحث عن ال macros)

lisp واللغات المشابهة مثل scheme تعتمد في قراءة البرنامج ليس على مجرد قراءة مجموعة من الحروف ولكنها تتعامل ب forms (او ربما انسب وصفها ب lisp objects )

إضافة أخيرة الكثير يصل إلى ذهنه أن lisp لاعلاقة لها بالبرمجة الكائنية! ولكنها معلومة خاطئة تماما، وهي تدعم البرمجة الكائنية بطريقة ممتازة

0M@R كتب:

موضوع جميل و لكن عندى استفسار انت تقول

كيف لا يزال تطويرها قائما و نحن لا نسمع عنها ؟؟!! او لا نسمع عنها كثيرا قهى ليست من ضمن اللغات المشهورة مثل java و c , vb.net ؟؟ :blush:

هذا غير صحيح، lisp شهيرة جدا في تطبيقات الذكاء الصناعي وفي الحياة الأكاديمية فضلا عن سهولتها وقوتها (تعبيرية وبرمجيا تخيل لغة تستطيع أن تبرمجها!) ربما لايوجد لغة تقارن بها أصلا إلا إذا كانت من نفس العائلة ك scheme او clojure!

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#6

بارك الله فيك أخي ahmed_youssef

اقتباس
lisp شهيرة جدا في تطبيقات الذكاء الصناعي وفي الحياة الأكاديمية فضلا عن سهولتها وقوتها (تعبيرية وبرمجيا تخيل لغة تستطيع أن تبرمجها!) ربما لايوجد لغة تقارن بها أصلا إلا إذا كانت من نفس العائلة ك scheme او clojure!

فعلاً ... أستغرب عدم انتشارها في الأوساط العادية للمبرمجين ... لا تجد من يتحدث عن فلسفة LISP ... عن أسلوب LISP عن تطبيقات LISP ... للأسف...

موضوع مفيد جدا بارك الله فيكم

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 22 ديسمبر 2012 في 21:37

#7

السلام عليكم

مقالة رائعة

اقتباس
4. A new concept of variables.

كل المتغيرات هي مؤشرات ..فمثلا عملية الإسناد ليست نسخ المحتوى من متحول آخر

بل نسخ عنوان القيمة من مؤشر لآخر

فصار المتحول اسمه place بصفته ال يهمنا الا المكان الذي يشير اليه

- إذاً فعلى هذا لابد أن توجد طريقة لنسخ قيم المتغيرات !

تم تعديل هذه المشاركة بواسطة ahmedsaoud31 في 23 ديسمبر 2012 في 00:40

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#9
اقتباس
- إذاً فعلى هذا لابد أن توجد طريقة لنسخ قيم المتغيرات !

طان يجدر بك السؤال عن كيفية انشاء مؤشر واسناده لعنوان في الذاكرة ... smile.gif

اقتباس
john McCarthy مؤسس ال AI وتنبأ بال Cloud Computing ... فعلا عالم كبير و شخص سابق عصره بمراحل

ربما يكون قدوة لكثير منا بعقليته وذكائه wink.gif

بالتوفيق

#10

السلام عليكم

عند نسخ القيمة من متغير لأخر لا تتأثر قيمة المتغير الأصلية ولكن في حالة نسخ عنوان القيمة من مؤشر لمؤشر وتم تعديل القيمة ستتغير القيمة الموجودة في المؤشر الأول تبعاً , وبما أن ألية العمل هذه هي الإفتراضية إذاً لابد من وجود طريقة لنسخ القيمة , هذا ما فهمته من شرحك مصطفى لتلك الجزئية

1

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#11

بداية علينا فهم أنواع الكائنات في LISP ...

اقتباس

Every Lisp object is either an atom or a list

Examples of atoms:

numbers:

235.4 2e10 #x16 2/3

variables:

 foo 2nd-place *foo*

constants: pi t nil :keyword

strings, chars:

"Hello!" #\a

arrays:

#(1 "foo" A) #1A(1 "foo" A) #2A((A B C) (1 2 3))

structures:

#s(person first-name dana last-name nau)

اقتباس

Here are some atoms.


eve
1
bananastand
carbon

Here are some lists:


(1 2 3 4)
((i hate) (peanut butter) (and jelly))
(you (walrus (hurt) the (one you) love))
(add 3 (mult 4 5))
(garbage (garbage) out)
(car ((in the garage) park))
(deeper and (deeper and (deeper and (deeper we went))))

انظر المثال الأخير كم هو ممتعlaugh.gif

لتعريف نواة ... فإننا نكتب مثلا :

(SETQ a 15)

وبذلك يمكننا تعريف متحول آخر لنسنده إلى قيمة المتحول القديم :

(SETQ b a)

ان أي عملية بين قوسين ينتج عنها قيمة أو شيء ما ... يتم حفظ هذا الشيء ما في مكان من الذاكرة ..إلى حين أن يتم الإشارة إليه من قبل أحد المؤشرات ...

وفيما يلي التوابع المستخدمة لعملية الاسناد

functions: defconstant, defparameter, defvar, set, setq, psetq, setf,
andpsetf

انظر هنا الى عملية اسناد طويلة بعض الشيء ... (كل عنصر يتم اسناده للعنصر التالي ):

(setq x0 1 x1 1 x2 (+ x1 x0) x3 (+ x2 x1) x4 (+ x3 x2))

وهذه طريقة لعمل swapلعنصرين :

(setq temp x1 x1 x4 x4 temp)

الفكرة الأساسية التي عليك استيعابها هي أن المتحول عندما تتغير قيمته فهذا يعني أنه غير مكانه الذي يؤشر إليه ... وليس أن القيمة التي يؤشر عليها تغيرت ...

مثلاً ... لدينا x=2ولدينا y=3

فكتبنا ... y=x فصارت y==2 وأين ذهبت القيمة الأولى 3 ... قد تكون لا زالت في الذاكرة ...ولكن لا شيء يشير إليها...

الفكرة رائعة الآن لذلك ركز معي :

y+=1 ما الذي سيحدث .؟ سيتم إنشاء قيمة جديدة في الذاكرة وهي ناتج العملية 3 ...

ثم يتم اسناد المؤشر y إليها ... وبالتالي يبقى x كما هو .. لأن التغيير لم يحدث على نفس الحجرة . .smile.gifsmile.gifوصلت ؟wink.gif

والله ولي التوفيق ...

(أرجو التصحيح إن كنت قد أخطأت في شيء )

1
#12

السلام عليكم

تمام مصطفى هذا ما كنت أريد أن أعرفه , بارك الله فيك

ولكن على ما أظن أنه لايتم الإحتفاظ بالقيم مادام ليس هناك ما يشير إلى هذا العنوان , وإلا لو يتم الإحتفاظ بالقيم في الذاكرة وقمنا بعمل حلقة تكرار كبيرة , ماذا سيحدث ؟!blink.gif

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#13

هذه مهمة الgarbage collector ... لا تقلق فقد كان mccarthy منتبها لفكرتك happy.gif

بالتوفيق

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…