এমএল ধরণের অনুক্রমের সূচকীয় ব্যয়ের সংক্ষিপ্ত উদাহরণ


11

এটি আমার নজরে আনা হয়েছিল যে ওসিএএমএল এর মতো কার্যকরী ভাষায় টাইপ অনুক্রমের ব্যয় খুব বেশি হতে পারে। দাবিটি হ'ল এখানে মত প্রকাশের ক্রম রয়েছে যে প্রতিটি অভিব্যক্তির জন্য সংশ্লিষ্ট প্রকারের দৈর্ঘ্য প্রকাশের দৈর্ঘ্যের উপর সূচকীয়।

আমি নীচের ক্রমটি তৈরি করেছি। আমার প্রশ্নটি: আপনি কি আরও সংক্ষিপ্ত অভিব্যক্তিগুলির সাথে একটি ক্রম জানেন যা একই ধরণের অর্জন করে?

# fun a -> a;;
- : 'a -> 'a = <fun>
# fun b a -> b a;;
- : ('a -> 'b) -> 'a -> 'b = <fun>
# fun c b a -> c b (b a);;
- : (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>
# fun d c b a -> d c b (c b (b a));;
- : ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
   (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'd
= <fun>
# fun e d c b a -> e d c b (d c b (c b (b a)));;
- : (((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
    (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'd -> 'e) ->
   ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
   (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'e
= <fun>
# fun f e d c b a -> f e d c b (e d c b (d c b (c b (b a))));;
- : ((((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
     (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'd -> 'e) ->
    ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
    (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'e -> 'f) ->
   (((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
    (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'd -> 'e) ->
   ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
   (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'f
= <fun>

উত্তর:


14

এই উত্তরে, আমি কেবলমাত্র ল্যাম্বডা-ক্যালকুলাস এবং হিমলে-মিলনারlet অনুসরণ করে বহুকর্মী ভাষার সাথে ভাষার একটি মূল এমএল খণ্ডকে আটকে রাখব । সম্পূর্ণ ওসিএএমএল ভাষার অতিরিক্ত বৈশিষ্ট্য রয়েছে যেমন সারি বহুবর্ষ (যা আমি যদি সঠিকভাবে স্মরণ করি তাত্ত্বিক জটিলতা পরিবর্তন করে না তবে বাস্তব প্রোগ্রামগুলির সাথে আরও বড় ধরণের প্রবণতা রয়েছে) এবং একটি মডিউল সিস্টেম (যা আপনি যদি কঠোরভাবে শক্ত করেন তবে তা হতে পারে না) বিমূর্ত স্বাক্ষর জড়িত প্যাথলজিকাল ক্ষেত্রে নির্ধারণ)।

মূল এমএল প্রোগ্রামের কোনও প্রকার রয়েছে কিনা তা সিদ্ধান্ত নেওয়ার জন্য সবচেয়ে খারাপ সময়ের জটিলতা প্রোগ্রামের আকারের একটি সাধারণ তাত্পর্যপূর্ণ। এই ফলাফলের জন্য শাস্ত্রীয় উল্লেখগুলি হল [কেটিইউ 90] এবং [এম 90]। [এস 95] এ আরও প্রাথমিক কিন্তু কম সম্পূর্ণ চিকিত্সা দেওয়া হয়েছে।

একটি কোর এমএল প্রোগ্রামের ধরণের সর্বাধিক আকার প্রকৃতপক্ষে প্রোগ্রামের আকারে দ্বিগুণ তাত্পর্যপূর্ণ। প্রকারের পরীক্ষককে অবশ্যই প্রোগ্রামের ধরণটি মুদ্রণ করতে হবে, তাই সময়টি দ্বিগুণ হয়ে যেতে পারে; গাছের পুনরাবৃত্ত অংশগুলির সংক্ষিপ্তসারগুলি সংজ্ঞায়িত করে এটিকে আবার সাধারণ ঘনিষ্ঠে ফিরিয়ে আনা যায়। এটি কোনও প্রয়োগে গাছের ধরণের অংশ ভাগ করে নেওয়ার সাথে মিল রাখতে পারে।

আপনার উদাহরণ ধরণের তাত্পর্যপূর্ণ বৃদ্ধি দেখায়। দ্রষ্টব্য, তবে, টাইপটির পুনরাবৃত্ত অংশগুলির সংক্ষিপ্তসারগুলি ব্যবহার করে ধরণের লিনিয়ার আকারের উপস্থাপনা দেওয়া সম্ভব। এটি কোনও প্রয়োগে গাছের ধরণের অংশ ভাগ করে নেওয়ার সাথে মিল রাখতে পারে। উদাহরণ স্বরূপ:

# fun d c b a -> d c b (c b (b a));;
t2 -> t2
where t2 = (t1 -> 'b -> 'c) -> t1 -> 'a -> 'd
where t1 = 'a -> 'b

এখানে একটি ধারণামূলক সরল উদাহরণ রয়েছে: জোড়াটির ধরণের আকারের ধরণের (x,x)দ্বিগুণ আকারের x, তাই আপনি যদি বারটি pairফাংশনটি রচনা করেন তবে আপনি এক ধরণের আকার ।Θ ( 2 এন )এনΘ(2এন)

# let pair x f = f x x;;
# let pairN x = pair (pair (pair … (pair x)…));;
'a -> tN
where tN = (tN-1 -> tN-1 -> 'bN) -> 'bN
…
where t2 = (t1 -> t1 -> 'b2) -> 'b2
where t1 = ('a -> 'a -> 'b1) -> 'b1

নেস্টেড পলিমারফিক letসংজ্ঞা চালু করে, ধরণের আকার আবারও তাত্পর্যপূর্ণভাবে বৃদ্ধি পায়; এবার, ভাগ করে নেওয়ার কোনও পরিমাণ তাত্পর্যপূর্ণ বৃদ্ধি বন্ধ করতে পারে না।

# let pair x f = f x x;;
# let f1 x = pair x in
  let f2 x = f1 (f1 x) in
  let f3 x = f2 (f2 x) in
  fun z -> f3 (fun x -> x) z;;

তথ্যসূত্র

[কেটিইউ 90] কেফুরি, জে।; Tiuryn; উরাইজজিন, পি। (1990)। "এমএল টাইপিবিলিটি ডিজেপটাইম-সম্পূর্ণ"। কম্পিউটার সায়েন্সে লেকচার নোটস। CAAP '90 431: 206-220। [ স্প্রিংগার ] [ গুগল ]

[এম 90] মায়ারসন, হ্যারি জি। (1990) "নির্ধারণকারী ক্ষতিকারক সময়ের জন্য এমএল টাইপিবিলিটি সিদ্ধান্ত সম্পূর্ণ"। প্রোগ্রামিং ভাষার নীতিমালার উপর 17 তম এসিএম সিগপ্ল্যান-সিগন্ট সিম্পোজিয়ামের কার্যক্রম। পপল '90 (এসিএম): 382–401। [ এসিএম ]

[পি04] বেঞ্জামিন সি পিয়ার্স। প্রকার এবং প্রোগ্রামিং ভাষাতে উন্নত বিষয়। এমআইটি প্রেস, 2004. [ আমাজন ]

[PR04] ফ্রান্সেস পোটিয়ার এবং দিদিয়ের রেমি। "এমএল প্রকারের অনুচ্ছেদের সারমর্ম"। [প04] এর দশম অধ্যায়। [ পিডিএফ ]

[এস 95] মাইকেল আই। শোয়ার্জবাচ। পলিমারফিক টাইপ অনুমান। ব্রিকস নির্মিত LS-95-3, জুন 1995 PS


সুতরাং মূলত, টাইপ অনুক্রমের সাথে মিলিত টাইপ এক্সপ্রেশনগুলির "রচনাগত" প্রকৃতি কি সমস্যার মূল?
didierc

1
@ ডিডিয়ারc আমি আপনার মন্তব্য বুঝতে পারি না। প্রচুর জিনিস গঠনমূলক হয়। একটি উপায়ে, মূল কারণটি হ'ল কোনও বস্তুর সদৃশকরণের মূল ক্রিয়াকলাপগুলি (দুটি ধরণের একইরকম প্রতিবন্ধক) এবং যুগল ( ->অপারেটর) এর থেকে আপনি ঘনিষ্ঠভাবে বৃদ্ধি করতে পারেন (একটি ফিবোনাচি গাছ)।
গিলস 'অশুভ হওয়া বন্ধ করুন'

হ্যাঁ, আমি মনে করি এটিই আমি বোঝাতে চেয়েছিলাম: টাইপ বীজগণিত সংজ্ঞা রচনা অনুসারে হয় (আপনি আপনার উত্তরে "জোড় ফাংশন রচনা" শব্দটি ব্যবহার করেছেন, সম্ভবত এটিই আমি শব্দটি বেছে নিয়েছি), এই অর্থে থাফ টাইপের অভিব্যক্তিটি তৈরি করা হয়েছে ছোট এক্সপ্রেশন এবং অপারেটর এবং প্রতিটি নতুন রচনাগুলি কমপক্ষে 2 একটি ফ্যাক্টর দ্বারা অভিব্যক্তির আকারকে স্কেল করে (আরও জটিল পলিমারফিক ধরণের - ট্রায়াডিক বা আরও বেশি, গুণকটি বড়)।
didierc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.