السلام عليكم ....
رغم أني من محبي ++C حتى النخاع, إلا أني أجد المتعة أيضاً في اللغات الـ functional بشكل لا يصدق :)
الحقيقة, أني لم أرى حتى الآن لا موقعاً و لا حتى شخصاً عربياً يتكلم عنها! لماذا هذا التجاهل ؟
على الرغم من أن هذه اللغات, توفر طريقة مختلفة للتفكير, و برأي البعض أفضل بكثير من الـ imperative العقيمة :huh:
فمثلاً... أردت اختبار هذا الشيء بنفسي ... قررت أن أكتب الـ merge sort بـ scheme ... و المفاجأة ؟
بلغة C احتجت إلى ما يقارب الساعة لإنتاج دالة, مع التنقيح و خلافه ... مع scheme أخذت مني خمس دقائق و ربما أكثر بقليل, و لم أحتج إلى تنقيح الكود...
الغريب أن اللغات الـ functional تبدو لوهلة صعبة الفهم, و لكن ما إن تفهم المغزى منها, حتى تكتب دون توقف... و الغريب أن ما تكتبه يكون صحيحاً من المرة الأولى غالباً... بالنسبة لي على الأقل!
هذا كود لدالة merge sort كتبته بـ scheme ... لاتنظر إلىه على أنه من كتابة كائنات فضائية.. تعلمت scheme منذ أقل من عدة أشهر... و أجدها أسهل بكثير من أي لغة تعلمتها حتى الآن!
و عندما أقرأ البرامج التي كتبتها من قبل بهذه اللغة أجدها بديهية على العكس من برامج ++C/C التي كتبتها!
; Khaled Alshaya (define (append listOne listTwo) (cond ((null? listOne) listTwo) (else (cons (car listOne) (append (cdr listOne) listTwo))) )) (define (merge listOne listTwo) (cond ((null? listOne) listTwo) ((null? listTwo) listOne) ((< (car listOne) (car listTwo)) (append (cons (car listOne) '()) (merge (cdr listOne) listTwo))) ((= (car listOne) (car listTwo)) (append (cons (car listOne) '()) (merge (cdr listOne) listTwo))) (else (append (cons (car listTwo) '()) (merge listOne (cdr listTwo)))) )) (define (mergesort lis) (cond ((null? lis) '()) ((null? (cdr lis)) lis) (else (merge (cons (car lis) '()) (mergesort (cdr lis)))) )) (mergesort '(99 77 88 66 44 55 33 11 22 0))
هل من اهتمام عربي بهذه الأسلوب من البرمجة ؟!
و إذا كان كذلك ماهي اللغة التي تفضلها ؟
تحياتي ....





