প্রশ্নগুলিতে অনর্থক লক্ষ্য ব্যবহার


12

( @ রিপিয়তের পরামর্শে ) একটি খাঁটি প্রোগ্রামের ক্যোয়ারী বিবেচনা করুন 1 ?- G_0. যদি কোয়েরিটি ?- G_0, G_0.থাকে তবে কী ব্যবহার করবে ?

পাদটীকা
1 ট্যাবলেট নেই (নিরাপদ থাকতে), সীমাবদ্ধতাগুলি ঠিক আছে।
বিষয়টিতে পূর্ববর্তী পোস্ট


ফলাফল সংখ্যা স্কোয়ারিং?
উইলেম ভ্যান ওনসেম

1
আমি এটি গ্রহণ করি যে লক্ষ্যটির টানা চলমান থেকে কোনও রাজ্যের তথ্য সংরক্ষণ করা হয় না। অন্য কথায় প্রশ্নের ভিন্নতার অনুমতি দেওয়া হয় না, যেমন: ?- G_0(State), G_0(State).প্রথম গোলের ফলাফল থেকে দ্বিতীয় গোলের ফলাফলের জন্য কোনও স্ট্যাকের উপরে কোনও রাজ্য পাস হচ্ছে না?
গাই কোডার

1
G_0যেকোনও (খাঁটি) লক্ষ্য হতে পারে, বলুনG_0 = append(Xs,Ys,Zs)
মিথ্যা

1
@ গুয়কোডার: সংযোগ প্রয়োজন required ( G_0;G_0একের সাথে পার্শ্ব প্রতিক্রিয়া বা পারফরম্যান্স / ক্যাশে / তাবেলিংয়ের সমস্যাগুলি পরীক্ষা করা যেতে পারে)
মিথ্যা

1
বিটিডাব্লু, পরিবর্তে G_0(State),G_0(State)একজন লিখেছেনcall(G_1,State), call(G_1,State)
মিথ্যা

উত্তর:


3

ক্যোয়ারী এর ?- G_0, G_0.অপ্রয়োজনীয় উত্তরগুলি সনাক্ত করতে সহায়তা করে?- G_0.

তাই এটি উত্তর সংখ্যা তুলনা করতে যথেষ্ট কাজের জন্য ?- G_0.এর উত্তর নম্বর দিয়ে ?- G_0, G_0.। এই উত্তরগুলি সংরক্ষণ করার দরকার নেই (এটি যাইহোক ত্রুটিগুলির ঘন উত্স যা)। মাত্র দুটি পূর্ণসংখ্যা! যদি তারা সমান হয়, তবে কোনও অতিরিক্ত বাধা নেই। কিন্তু যদি?- G_0, G_0. আরও উত্তর থাকে তবে কিছুটা বাড়াবাড়ি আছে। এখানে একটি উদাহরণ:

p(f(_,a)).
p(f(b,_)).

?- p(X).
   X = f(_A, a)
;  X = f(b, _A).  % two answers

?- p(X), p(X).
   X = f(_A, a) 
;  X = f(b, a)
;  X = f(b, a)
;  X = f(b, _A).   % four answers
                   % thus p(X) contains redundancies

... এবং এখন এটি ঠিক করুন:

p(f(B,a)) :-
   dif(B, b).
p(f(b,_)).

?- p(X).
   X = f(_A, a), dif(_A, b)
;  X = f(b, _A).

?- p(X), p(X).
   X = f(_A, a), dif(_A, b), dif(_A, b).
;  X = f(b, _A).    % again two answers, thus no redundancy

জড়িত প্রতিবন্ধকতাগুলি ম্যানুয়ালি পর্যবেক্ষণ করার দরকার নেই।

যখন আমরা স্পষ্টভাবে কেবল অনর্থক উত্তর ব্যবহার করে অনুসন্ধান করছি তখন এটি আরও বাড়ানো যেতে পারে call_nth/2

?- G_0, call_nth(G_0, 2).

1

খাঁটি প্রোগ্রাম 1 এর কোয়েরি বিবেচনা করুন? - G_0। যদি কোনও জিজ্ঞাসা থাকে তবে কী ব্যবহার করবেন? - G_0, G_0। আছে?

আমি দ্বিতীয় লক্ষ্যটির কোনও কার্যকারিতা দেখছি না, বিশেষত যখন লেজ পুনরাবৃত্তি অপ্টিমাইজেশন ( শেষ কল অপ্টিমাইজেশন ) চালু থাকে

কোয়েরিটি রিসোর্স-লোভী এবং উপরের বিকল্পগুলি বন্ধ (উদাহরণস্বরূপ যখন ডিবাগিং করা হয়) তখন আমি একটি জিসি সমস্যা (স্ট্যাক / হিপ ওভারফ্লো) বুঝতে পারি ।

আমি মনে করি দ্বিতীয় কলটি রিডানডান্ট (বিশুদ্ধ প্রোগ্রামের জন্য) এবং সংকলক দ্বারা নির্মূল করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.