تخفيضات في نهاية المسندات متكررة في حاسوب

StackOverflow https://stackoverflow.com/questions/1339631

  •  20-09-2019
  •  | 
  •  

سؤال

pred(Args).
pred(Args) :-
    goalA,
    goalB,
    !,
    pred(Args).
pred(Args) :-
    goalC,
    goalD,
    !,
    pred(Args).

وعادة أود أن إرسال بريد المسند العودية التي كانت تعنى شيئا أداء الذاكرة على غرار المقتطف أعلاه من التعليمات البرمجية. مع خفض المستخدمة في محاولة لاجبار ذيل الأمثل دعوة تحدث. لقد تم مؤخرا يمر رمز قاعدة حاسوب كبيرة ولقد وجدت بعض الأمثلة حيث الخفض هو في الواقع بعد دعوة متكررة بدلا من مباشرة قبل ذلك. يفترض هذا له تأثير منع الأمثل دعوة الذيل من الحدوث بدلا من مساعدتها.

وسؤالي هو أستطيع نقل قطع من بعد المكالمة عودي إلى مباشرة قبل ذلك دون التأثير على معنى البرنامج؟ هذا على افتراض أن هناك قطع في الموقع النسبي نفسه لكل بند من المسند.

والآن لقد تم التفكير في ذلك بعض أكثر، وأنا أفكر ربما كان الجواب "ليس بالضرورة"، ولكن بعد إعادة كتابة كافة التعليمات البرمجية مع قطع قبل المكالمة وجدت أن جناح اختبار لا يزال يمر، وأنا "أتساءل أيضا إذا قد يكون هناك سبب مقصور على فئة معينة أخرى لكتابة المسندات من هذا القبيل. أم أنها مجرد سيئة الترميز؟

هل كانت مفيدة؟

المحلول

وتخميني هو أنه قد يكون سيئا الترميز (أو سوء فهم ما البلاغ قد فعل)

وأنا أقول هذا، لأنني، شخصيا، لم مرة واحدة في نفس الخطأ:

الشبكي: //mailbox.iai .uni-bonn.de / ساعي البريد / الجمهور / مفات-حاسوب / 2009 / 001540.html

http://xonix.habrahabr.ru/blog/60430/ (تحذير في الروسية)

ولكن الناس من SWI القائمة البريدية وأكد أن الطريق الصحيح من التعليمات البرمجية الذيل عودي هو

head :-
       <guard goals>, !,
       <deterministic stuff>,
       head.
head :-
       ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top