مفهوم و کاربرد برنامه های self-referential و Quine

مفهومات self-referential و Quine کمی عجیب غریب هست و همه جا با پارادوکس و پیچیدگی توضیح دادن و نمیشه فهمید و حالا بعد فهم نسبی هم کاربردی برای این امکان بفکرم نمیاد.
اگه با Quine کار کردین ممنون میشم مفهوم و فلسفه اش رو برام روشن کنین.

Kotlin Code

// version 1.1.2

const [val](https://scala-lang.org) F = """// version 1.1.2

const val F = %c%c%c%s%c%c%c

fun main(args: Array<String>) {
System.out.printf(F, 34, 34, 34, F, 34, 34, 34)
}
"""

fun main(args: Array<String>) {
System.out.printf(F, 34, 34, 34, F, 34, 34, 34)
}

Clojure Code

((fn [x] (list x (list (quote quote) x))) (quote (fn [x] (list x (list (quote quote) x)))))
1 Likes

یادمه قبلا یه مقدار درموردش سرچ کرده بودم، کاربردی نداره توی دنیای امروزی. صرفا یه کانسپته برای اینکه بهش فکر کنیم وقتی شبها خوابمون نمیبره و بعد از ۵دقیقه مغزمون خاموش بشه :sweat_smile:

البته من دنبال این بودم که باهاش MetaProgramming پیاده‌سازی کنم (نرم‌افزاری که به سورس خودش دسترسی داره و میتونه با توجه به شرایط محیط، تغییرش بده و دوباره اجرا کنه. توی زبانهای اسکریپتی مثل پایتون به نظرم جواب بده) ولی اصلا چیز بهینه‌ای نیست، قدرتی که میخوایم هم نخواهد داشت. مخصوصا وقتی Macroهای #lisp و زبونهای مشابهش رو داریم.
توی سمپل‌کدهای لینک دومی که معرفی کردید هم اگه نگاه کنید، ساده‌ترین و باحالترین کدها برای لیسپهاست (Lisp, Clojure, Racket). با اینکه از Marco استفاده نشده (نیازی بهش نبوده).

آیا امکان داره بیشتر از الآن، عاشق لیسپ بشم؟ :heart_eyes:
پ.ن:
لیسپ، الآن «یک زبان برنامه نویسی» نیست. یعنی اصلا زبان نیست. یه سری داکیومنته برای ساخت زبان. ‌(همونطور که LFS یک لینوکس نیست!) و با گذشت زمان، یه کم شلخته شده. (حتی بدبختی به اینجا رسیده که الآن چندین کامپایلر براش وجود داره که هرکدوم یه سری فیچرهایی دارن که توی اون‌یکی نیست!)
با @lxsameer داشتم صحبت میکردم میگفت «خیلی قدیمیه و چیزهای زیادی توش implement شده. واسه‌ی همین اون اصالت و تمیزی خودش کم کم از دست داده» (اینکه John McCarty خدابیامرز شده و دیگه بالا‌سر لیسپ نیست هم بی‌تاثیر نیست!) با اینکه هنوز از اکثر زبانها بهتر و مرتب‌تره، ولی میتونست خیلی بهتر باشه.
با توجه به این، باید بگم «فعلا علی‌الحساب، #Clojure بهترین زبان برنامه نویسیه.» تا ببینیم دهه‌ی جدید میلادی چی برامون داره.

1 Likes

من یاد این افتادم
((λ x (x x)) (λ x (x x)))
نتیجه این کد با تبدیل بتا، خودشه.
تو همچین موردایی میگن عبارت مورد نظر فرم نرمال نداره و اگه مثلا یه تابع تعریف کنی که تبدیل بتا رو انجام بده، وقتی این عبارتو بش بدی و اجراش کنی وارد یه infinite loop میشی.

1 Likes