çºç«¯
- ãC# ã® yield return ã®ä½¿ãé - u_1rohã®ã«ã¿ããã«コメントãæ¸ãï¼
- ä¹ ãã¶ãã« yhara ããã®ãRuby勉強会@関西-16「30分でわかるcallccの使い方」- Greenbear Diarããèªã¿ç´ãï¼
- oxy ããã®ãNon Determinism - Rubyのある風景ããæãåºãï¼
- ãããã C# 3.0 ãªãæ¸ãããªãï¼
ã¨ã¾ããããªæãã§ï¼
ãªã¹ãã¢ããã§é決å®æ§è¨ç®
以ä¸ã®ãªã¹ãã¢ããã®æ§è³ªã使ãã¨ãç·å½ããã®ããã°ã©ã ãæ ¼å¥½ããããã¨é決å®æ§ã®è¨ç®ãè¡ããã¨ãã§ãã¾ãã SICPãã次ã®ãããªåé¡ãåãããã¨ã«ãã¾ãã
Baker, Cooper, Fletcher, Millerã¨Smithã¯äºé建ã¦ã¢ãã¼ãã®ç°ãªãéã«ä½ãã§ãããBakerã¯æä¸éã«ä½ãã®ã§ã¯ãªããCooperã¯æä¸éã«ä½ãã®ã§ã¯ãªããFletcherã¯æä¸éã«ãæä¸éã«ãä½ãã®ã§ã¯ãªããMillerã¯Cooperããä¸ã®éã«ä½ãã§ãããSmithã¯Fletcherã®é£ã®éã«ä½ãã®ã§ã¯ãªããFletcherã¯Cooperã®é£ã®éã«ä½ãã®ã§ã¯ãªããããããã¯ã©ã®éã«ä½ãã§ãããã
ãã¦ããã®åé¡ã解ããã¨ã«ãã¾ãããã次ã«ç¤ºãã³ã¼ããè¦ãã¨ãã¾ãã§åé¡ã®æ¡ä»¶ã並ã¹ã¦ããã ãã®ããã«è¦ããããããã¾ããããå®ã¯ããã§å¯è½ãªè§£ãã¡ããã¨æ±ãããã¨ãã§ãã¾ãã
import Control.Monad.List solve = do baker <- [1, 2, 3, 4, 5] cooper <- [1, 2, 3, 4, 5] fletcher <- [1, 2, 3, 4, 5] miller <- [1, 2, 3, 4, 5] smith <- [1, 2, 3, 4, 5] guard $ distinct [baker, cooper, fletcher, miller, smith] guard $ baker /= 5 guard $ cooper /= 1 guard $ fletcher /= 1 && fletcher /= 5 guard $ miller > cooper guard $ abs (smith - fletcher) /= 1 guard $ abs (fletcher - cooper) /= 1 [baker, cooper, fletcher, miller, smith] distinct :: Eq a => [a] -> Bool distinct [] = True distinct (x:xs) = all (/=x) xs && distinct xs main :: IO() main = print solveå®è¡çµæ: [3,2,4,5,1]Non Determinism - Rubyのある風景
ããã® C# çãæ¸ãã¦ã¿ã¾ããï¼ã»ã¨ãã©ç´è¨³ã§è¡ãã¾ããªï¼
using System; using System.Linq; class Program { static void Main(string[] args) { var answers = from baker in Enumerable.Range(1, 5) from cooper in Enumerable.Range(1, 5) from fletcher in Enumerable.Range(1, 5) from miller in Enumerable.Range(1, 5) from smith in Enumerable.Range(1, 5) where new []{ baker, cooper, fletcher, miller, smith }.Distinct().Count() == 5 where baker != 5 where cooper != 1 where fletcher != 1 && fletcher != 5 where miller > cooper where Math.Abs(checked(smith - fletcher)) != 1 where Math.Abs(checked(fletcher - cooper)) != 1 select new { baker, cooper, fletcher, miller, smith }; foreach (var answer in answers) Console.WriteLine(answer); } }
{ baker = 3, cooper = 2, fletcher = 4, miller = 5, smith = 1 }
STL ã® std::next_permutation ã¿ãããªã®ãå ã«ä½ãã®ãããããããã¾ããï¼
ä½è«
æ¨å¹´ã ã£ããä¸æ¨å¹´ã ã£ããï¼MVP Summit ã§ã¬ãã¢ã³ãã«éã³ã«è¡ã£ãã¨ãï¼æ³¢æããã®éã®ä¸ã«å ¥ã£ã¦ããã®ã SICP 㨠Hibernate æ¬ã§ããï¼ãªãã¨ãããï¼ãã® 2 åãæªéåä½ãããã LINQ ãã§ãããã¨ããããããªãã¨å¦ã«ç´å¾ããæ¶ããããã¾ãï¼