আমি লিস্প, ক্লোজার এবং হাস্কেলের ব্যবহৃত "লেট" এর উত্স সম্পর্কে ভাবছিলাম। কেউ কি জানেন যে এটি কোন ভাষায় প্রথম প্রকাশিত হয়েছিল?
আমি লিস্প, ক্লোজার এবং হাস্কেলের ব্যবহৃত "লেট" এর উত্স সম্পর্কে ভাবছিলাম। কেউ কি জানেন যে এটি কোন ভাষায় প্রথম প্রকাশিত হয়েছিল?
উত্তর:
ঠিক আছে, বেসিকের ১৯ 19৪LET
সালের শুরু থেকেই সিনট্যাক্সের অংশ হিসাবে অ্যাসাইনমেন্ট ছিল , সুতরাং এটি let
লিস্পে ব্যবহারের পূর্বাভাস দিতে পারে , যা ক্রিস জেস্টার-ইয়ং পয়েন্ট হিসাবে লিস্টের বিবর্তন অনুসারে ১৯s০ এর দশক পর্যন্ত উপস্থিত হয়নি ।
আমি বিশ্বাস করি না কোবোল, ফোর্টরান, বা ALGOL এর LET
বাক্য বিন্যাসে রয়েছে। সুতরাং আমি বেসিক সঙ্গে যেতে যাচ্ছি।
let
শব্দগুলি খুব আলাদা - মৌলিকভাবে একটি লাক্ষিকভাবে স্কোপযুক্ত বাঁধাই নয়। সুতরাং, সঠিক উত্তরটি হ'ল "এটি ইংরেজীতে প্রথম প্রকাশিত হয়েছিল, দ্বাদশ শতাব্দীর আগে"।
let
এই প্রসঙ্গে ( let
x নিম্নলিখিত বর্ণনার is
কিছু in
) প্রথমে ইংরেজিতে গাণিতিক পাঠগুলিতে উপস্থিত হয়েছিল এবং এটিই প্রোগ্রামিংয়ে এসেছিল। আমি আনুষ্ঠানিক সিস্টেম - গাণিতিক ভাষা, প্রোগ্রামিং ল্যাঙ্গুয়েজ, অন্য যে কোনও কিছুতে কোনও পার্থক্য দেখছি না - সেগুলি সব একই।
equals
, না is
। এবং, হ্যাঁ, সিউডো-কোডই এখন পর্যন্ত সেরা উত্তর।
আমি একটি তাত্ত্বিক দৃষ্টিভঙ্গি যুক্ত করতে চাই: শাস্ত্রীয় ল্যাম্বদা ক্যালকুলিতে let
কেবল সিনট্যাকটিক চিনি। উদাহরণ স্বরূপ
let x = N in M
সহজভাবে লিখতে পারেন
(λx.M)N
সুতরাং প্রথম দিকের (ক্রিয়ামূলক) ভাষায় এর প্রথম উপস্থিতিটি আকর্ষণীয় নয়।
যাইহোক, এটি হিন্ডলি-মিলনার টাইপ সিস্টেমের আবিষ্কার এবং এর ধরণের ইনফারেন্স অ্যালগরিদমের সাথে খুব গুরুত্বপূর্ণ হয়ে ওঠে । এই ধরণের সিস্টেমে let
অপরিহার্য, কারণ এটি বহুকর্মী (এইচএম-তে অ্যাবস্ট্রাকশন এর বিপরীতে)। উদাহরণস্বরূপ, এই সহজ অভিব্যক্তি বিবেচনা করুন:
let id = λx . x in id id
এখানে id
পলিমারফিক রয়েছে, এটি টাইপ করে ∀α.α → α
এবং তাই id id
টাইপ-চেকস রয়েছে - এটি টাইপটি id id : τ → τ
নির্বিচারে τ (প্রথম জন্য id
আমরা বরাদ্দ τ → τ
করার α
এবং দ্বিতীয় জন্য id
আমরা বরাদ্দ τ
জন্য α
।)
যাইহোক, আমরা st বিমূর্ততা এবং অ্যাপ্লিকেশন ব্যবহার করে এটি পুনরায় লিখতে পারি না। অভিব্যক্তি
(λid . id id)(λx.x)
টাইপ-চেক করে না, কারণ প্রথম λ বিমূর্তের মধ্যে id
অবশ্যই id : σ
কিছু for এর জন্য মনোমর্ফিক টাইপ করা উচিত , এবং এমন কোনও নেই যা আমরা প্রয়োগ id : σ
করতে পারি id : σ
।
আপনি এটি হাস্কেলের মধ্যে নিজে চেষ্টা করতে পারেন। let id = \x -> x in id id :: t -> t
টাইপ-চেক চলাকালীন টাইপিং (\id -> id id)(\x -> x)
ব্যর্থ হয়
দেখা যায়: অসীম প্রকারটি নির্মাণ করতে পারে না:
t0 = t0 -> t0
প্রথম যুক্তিতেid
, যথাid
অভিব্যক্তিতে:id id
প্রকাশে:\id -> id id
a[i]
স্বরলিপি সিনট্যাকটিক চিনি *(a + i)
। উইকিপিডিয়া নিবন্ধটিরও একটি সুন্দর ব্যাখ্যা রয়েছে।
let
পরিচিতি
let
চালু, যেমন প্রশ্ন শুরু হয়েছে ... আমি "দিন" উদ্ভব সম্পর্কে হতাশ ছিল
লিস্প হ'ল এখন এলইটি থাকার প্রাচীনতম ভাষা । তবে বেসিকই প্রথম এটি পেয়েছিল কারণ লিস্প এটি পরে পেয়েছিল।
অ্যাডা লাভলেস অ্যানালিটিক্যাল ইঞ্জিনে (1843) - কোনও এলইটি নেই, কোনও প্রোগ্রামের মতো দেখাচ্ছে:
N0 6 N1 1 N2 1 × L1 L0 S1 L0 L2 S0 L2 L0 CB?11 '
জিউজের প্লানকালাল (1943-45) এ প্রোগ্রামটি দেখেছে:
P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0]
max(V0[:8.0],V1[:8.0]) → Z1[:8.0]
max(Z1[:8.0],V2[:8.0]) → R0[:8.0]
END
জন মাউচলি 1949 সালে শর্ট কোড প্রস্তাব করেছিলেন
X3 = ( X1 + Y1 ) / X1 * Y1
অ্যাসাইনমেন্টের জন্য ব্যবহৃত 1950 সালের বার্কের মধ্যবর্তী পিএল ->
1952 সালে Rutishauser ব্যবহৃত =>=
Bmshms সংকলক, 1952, ব্যবহৃত ->
ম্যানচেস্টার বিশ্ববিদ্যালয়ে, অ্যালিক গ্লেনি Autocode
1950 এর দশকের গোড়ার দিকে বিকশিত হয়েছিল। প্রথম কোড এবং সংকলকটি ম্যানচেস্টার ইউনিভার্সিটিতে মার্ক 1 কম্পিউটারের জন্য 1952 সালে তৈরি করা হয়েছিল এবং এটি প্রথম সংকলিত উচ্চ-স্তরের প্রোগ্রামিং ভাষা হিসাবে বিবেচিত হয়। আবার, ->
অ্যাসাইনমেন্টের জন্য
চার্লস অ্যাডামস, ব্যাকাসের গ্রুপের ফোরট্রান 0, ব্রুকারের অটোকোড 2, লুবিমস্কি এবং কামিনিনের 1-1; সব 1954 সালে, আবার=
বেকাক (গ্রীস, পোর্টার), 1954, *
নিয়োগের জন্য!
কমপাইলার, ADES, 1955, =
আইটি, 1956, <-
ফরট্রান, 1957, =
এটি -3 (1956), ম্যাথ-ম্যাটিক (1957), আবার =
,
তবে ১৯৫7 সালে ফ্লো-ম্যাটিকের দুটি অ্যাসাইনমেন্ট ছিল এবং দুটোই কথায় আছে
TRANSFER a TO b
এবং MOVE a TO b
বাউর এবং স্যামেলসনের মেশিন, 1957: =>
দুঃখিত, আমি 1957 এবং 1964 এর মধ্যে সমস্ত ভাষা কভার করতে পারি না, তবে আরও বৃহত্তর ভাষা
1957 - COMTRAN (forerunner to COBOL)
1958 - LISP
1958 - ALGOL 58
1959 - FACT (forerunner to COBOL)
1959 - COBOL
1959 - RPG
1962 - APL
1962 - Simula
1962 - SNOBOL
1963 - CPL (forerunner to C)
অ্যাসাইনমেন্টের জন্য এলইটি নেই বা এলআইএসপি ক্ষেত্রে ছিল না ।
ডার্টমাউথ বেসিক বেসিক প্রোগ্রামিং ভাষার মূল সংস্করণ। প্রথম ইন্টারেক্টিভ সংস্করণটি সাধারণ ব্যবহারকারীদের জন্য 1964 সালের জুনে উপলব্ধ করা হয়েছিল ;
LET / = — assign formula results to a variable
ঠিক আছে, এই তিনজনের মধ্যে, লিস্পের অবশ্যই এটি প্রথম ছিল। Haskell, 80s সম্পর্কে এসে 00s মধ্যে Clojure, এবং let
প্রায় ছিল দীর্ঘ আগে পারেন সেই তারিখ। :-)
করা হবে কিনা তা পাতার মর্মর ছিল হিসাবে ভাষাটি এটিকে আবিষ্কার করেছে, আমি এখনও সমর্থন জানাতে পারি না, কিন্তু আমি কিছু গবেষণা করতে এবং দেখতে পাবেন। :-)
আপডেট: লিস্পের বিবর্তন অনুসারে (পৃষ্ঠা 46 দেখুন), এটি উল্লেখ করেছে যে let
70 এর দশকে আবিষ্কার হয়েছিল:
LET
- প্রতিটি সাইটে প্রথমে ম্যাক্রো স্থানীয়ভাবে উদ্ভাবিত এবং পুনরায় উদ্ভাবিত the ম্যাকলিস্প বিশ্বে দেরিতে আগত; লিসপ আর্কাইভ অনুসারে, এটি 1979 সালে লিস্প-মেশিন লিস্প থেকে পিডিপি -10 ম্যাকলিস্পে এবং একইDEFMACRO
সাথে জটিল লিস্প মেশিনেরDEFUN
আর্গুমেন্ট সিনট্যাক্সের সাথে সংশোধিত হয়েছিল।
এটি এর আগে অন্য কোনও ভাষায় আবিষ্কার হয়েছিল কিনা তা এখনও পুরোপুরি উত্তর দেয় না, তবে আরও একটি ডেটা পয়েন্ট। :-)
1978 সালের জানুয়ারী থেকে প্রথম সংশোধিত প্রকল্পের রিপোর্ট এআইএম -452 রয়েছে LET
। পৃষ্ঠা 9।
লক্ষ করুন যে লিস্প এর আগে PROG
স্থানীয় ভেরিয়েবলগুলি প্রবর্তন করতে একটি ভিন্ন নির্মাণ ব্যবহার করেছিল ।
(let ((a 1)
(b 1))
(+ a b))
প্রায় আগে হিসাবে লেখা হত
(prog (a b)
(setq a 1)
(setq b 1)
(+ a b))
let
লিস্পের উপভাষায় সর্বদা লেক্সিকালি স্কোপ করা হত ?
let
স্কোপিং (স্কিম, '75) হিসাবে প্রায় পুরানো বলে মনে হয়েছে এবং গ্রহণযোগ্যতা পেতে লেক্সিকাল স্কোপিংয়ের জন্য এটি কিছুটা সময় নিয়েছে, তাই আমি অনুমান করব যে প্রথম উদাহরণগুলি let
গতিশীল স্কোপড লিস্পসের প্রসঙ্গে ছিল। আজ, ইমাস লিস্পের ডিফল্টরূপে এখনও গতিশীল সুযোগ রয়েছে lambda
এবং এর সাথে let
( পূর্বেরের পক্ষে চিনিটি যাইহোক) তাদের প্যারামিটারগুলি গতিশীলভাবে আবদ্ধ করে।