Authors: Enguang Shi, Sizhe Fan
What is the problem?:
We will be implementing a practical album recommender using Prolog. Our application will be recommending a series of albums based on user's preference, we ask user for a time frame ( a specific year or a range of years) or a score to search for an album that best suits the user's need.
What is the something extra?
Users can explore music genres using our program. Also they can directly listen to an album after the recommendation is produced. Our recommender contains a large amount of album records and genre records, user would be able to choose find an album base on the genre. Our application would display the list of supported genre, and ask the user to choose a genre before recommending a specific album. And the user can find descriptions about any genre by asking the recommender to display the wiki page for that genre. After an album is recommended, the user can listen to that album by asking the recommender to redirect to the album page on Spotify.
What did we learn from doing this?
We learned that Prolog is very good for this kind of projects, we can access data and filter data with relative ease. We like Prolog as it is very logical, thus designing something that follows the natural logic is very easy. One thing that appeared very useful to us is the fact that using prolog we can easily add more restrictions to the data without heavy modifying our code, we can add new things without redesigning the entire program. We like that in Prolog you can just tell it all the facts and work from there, it is very logical and works well with our design. We also felt that Prolog doesn’t have types made it easier for a lot of things, but it also made things harder when you are trying to do things in the traditional way. For example parsing data and designing GUI was particularly difficult comparing to other languages. Also Prolog is hard to debug, we experienced situations where we can’t find any problem with the logic, but the result is wrong. We learned that we have to pay close attention to details, small things like placing the . in the wrong place can cause big mistakes without letting you know. And similar things happened with user input, if the input is wrong Prolog doesn’t always return false, it sometimes can give you a wrong answer but the user doesn’t know that, so when designing a Prolog program we have to pay more attention on error handling and covering edge cases.