سؤال

أولا وقبل كل شيء آسف لغتي الإنجليزية.

أرغب في استخدام خوارزمية تراجع في Erlang. سيكون بمثابة تخمين لحل sudokus مليئة جزئيا. يتم تخزين Sudoku 9x9 كقائمة تضم 81 عنصرا، حيث يخزن كل عنصر الرقم المحتمل الذي يمكن أن يذهب إلى هذه الخلية.

بالنسبة إلى سودوكو 4x4، يبدو محللي الأولي مثل هذا: [[1]، [3]، [2]، [4]، [4]، [2]، [3]، [1]، [2]،] [4]، [1]، [2،3]، [2،3]، [1]، [4]، [2،3]

هذا سودوكو لديه 2 حلول. يجب أن أكتب كل منهما. بعد ذلك، وصل هذا الحل الأولي، أحتاج إلى تنفيذ خوارزمية تراجع، لكنني لا أعرف كيفية جعله.

فكرتي هي كتابة العناصر الثابتة إلى قائمة جديدة تسمى القائمة الثابتة التي ستغير الخلايا متعددة الحلول إلى [].

للمثال المذكور أعلاه، يبدو أن القائمة الثابتة تبدو وكأنها هذه: [[1]، [3]، [2]، [4]، [4]، [2]، [3]، [1]، [] [] ، [1]، []، []، []، [1]، [4]، []

من هنا لدي "عينة"، أبحث عن أدنى مستوى في قائمة حلول الحلول التي لا تساوي 1، وأحاول أول عدد ممكن من هذه الخلية وأضعها إلى تلك القائمة الثابتة. لدي خوارزمية لتحديث الخلايا والشيكات إذا كانت لا تزال سودوكو قابلة للحل أم لا. إذا لم يكن الأمر كذلك، فأنا لا أعرف كيفية العودة إلى الوراء وجرب واحدة جديدة. أعرف رمز الزائفة في الأمر ويمكنني استخدامه لغات حتمية ولكن ليس ل Erlang. (prolog تنفذ في الواقع خوارزمية التراجع، ولكن ارلانغ لم)

اي فكرة؟

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

المحلول

إعادة: وظائف المراكب بلدي.

هذه هي الوظائف العامة التي توفر إطارا للتعامل مع المتغيرات المنطقية والمتغيرات المنطقية بمحرك Prolog. يجب عليك تقديم الوظيفة (المسندات) التي تصف منطق البرنامج. إذا كتبت لهم كما تفعل في Prolog، يمكنني أن أظهر لك كيفية ترجمةهم إلى Erlang. لفترة وجيزة جدا ترجم شيء مثل:

p :- q, r, s.

في وصفت إلى شيء مثل

p(Next0) ->
    Next1 = fun () -> s(Next0) end,
    Next2 = fun () -> r(Next1) end,
    q(Next2).

أنا هنا يتجاهل الكل حجج أخرى باستثناء المستمرات.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top