Nói rằng tôi có những điều sau Haskell loại cây, trong đó "Nhà nước" là một wrapper đơn giản:Làm thế nào để chức năng tạo ra một bề rộng cây đầu tiên. (Với Haskell)
data Tree a = Branch (State a) [Tree a]
| Leaf (State a)
deriving (Eq, Show)
Tôi cũng có một chức năng "mở rộng :: Tree a -> Tree một" mà phải mất một nút lá, và mở rộng nó thành một chi nhánh, hoặc lấy một chi nhánh và trả về nó không thay đổi gì. Loại cây này đại diện cho cây tìm kiếm N-ary. Tìm kiếm chiều sâu đầu tiên là một sự lãng phí, vì không gian tìm kiếm rõ ràng là vô hạn, vì tôi có thể dễ dàng tiếp tục mở rộng không gian tìm kiếm bằng cách sử dụng mở rộng trên tất cả các nút lá của cây và cơ hội vô tình bị thiếu mục tiêu-nhà nước là rất lớn ... do đó giải pháp duy nhất là một tìm kiếm rộng đầu tiên, thực hiện khá phong nha hơn here, mà sẽ tìm thấy giải pháp nếu nó ở đó.
Điều tôi muốn để tạo, mặc dù, cây đi qua tối đa tìm giải pháp. Đây là một vấn đề bởi vì tôi chỉ biết làm thế nào để làm điều này sâu đầu tiên, có thể được thực hiện bằng cách đơn giản gọi là "mở rộng" chức năng một lần nữa và một lần nữa vào nút con đầu tiên ... cho đến khi một mục tiêu nhà nước được tìm thấy. (Điều này thực sự sẽ không tạo ra bất kỳ điều gì khác sau đó là một danh sách thực sự khó chịu.)
Có thể cho tôi bất kỳ gợi ý nào về cách thực hiện điều này (hoặc toàn bộ thuật toán) hay không. ? (Hoặc bất kỳ nguồn nào về điều này, bởi vì tôi thấy khá ít.)
Ngoài ra, bạn có thể muốn sử dụng thứ gì đó ngoài 'State' ở đó, vì tên đó được sử dụng trong thư viện chuẩn cho đơn vị nhà nước, có trách nhiệm gây nhầm lẫn cho mọi người. –
Tôi nhận ra rằng ngay bây giờ khi tôi đang sử dụng các đơn vị nhà nước để thực hiện thuật toán của tôi, dựa trên những lời khuyên đưa ra ở đây. – wen