Attention: the list was moved to
https://github.com/dypsilon/frontend-dev-bookmarks
This page is not maintained anymore, please update your bookmarks.
Attention: the list was moved to
https://github.com/dypsilon/frontend-dev-bookmarks
This page is not maintained anymore, please update your bookmarks.
| {------------------------------------------------ | |
| A Haskell solution to: http://www.coinheist.com/rubik/a_regular_crossword/grid.pdf | |
| using the Z3 SMT solver. | |
| Z3 finds the following solution in about 7 mins | |
| on my Mac Core-i5, and another 7 mins to prove | |
| it's unique. | |
| NHPEHAS | |
| DIOMOMTH |
この記事はHaskell Advent Calendar 2012の26日目の記事です。Haskell Advent Calendar初参加です。コメントなどお待ちしております。
HaskellではString([Char]の別名)が文字列の基本型で、これはリストであるためにパターンマッチ・再帰やPreludeやData.Listにあるリスト用の関数を使って処理ができるという利点があります。ただし、実用上はパフォーマンスが低いため、TextやByteStringが代わりに用いられます。Textはいわゆるユニコード文字列、ByteStringはバイト列という区別です。この使い分けに関してはちょうどAdvent Calendarの@brain_appleさんのこの記事で解説されました。StackOverflowでの質問も参考になります。
Hackageを見ると、
| // public domain | |
| #include <cstdio> | |
| #include <cstdlib> | |
| #include <cstring> | |
| #include <string> | |
| #include <vector> | |
| #include <map> | |
| #include <memory> | |
| #include <windows.h> |
| {-# OPTIONS_GHC -fwarn-incomplete-patterns #-} | |
| module TuringMachine where | |
| import Control.Applicative | |
| import Control.Arrow hiding (left, right) | |
| import Control.Lens hiding (Tape, Zipper, left, right) | |
| import Data.List.Lens | |
| import qualified Data.Map as M | |
| import Data.Maybe | |
| data Instruction s = GoLeft |
| [12/09/20 20:11:44] くいなちゃん: くいなちゃん が新規ピクチャを設定しました | |
| [12/09/20 20:27:37] くいなちゃん が tooms32 を会話に追加しました | |
| [12/09/20 20:27:39] くいなちゃん が cat_mask を会話に追加しました | |
| [12/09/20 20:27:41] くいなちゃん が shindex00 を会話に追加しました | |
| [12/09/20 20:27:43] くいなちゃん が minto-ziru を会話に追加しました | |
| [12/09/20 20:27:45] くいなちゃん が moriken-www を会話に追加しました | |
| [12/09/20 20:27:47] くいなちゃん が kurisaka_konabe を会話に追加しました | |
| [12/09/20 20:27:49] くいなちゃん が tsukiyo_rosette を会話に追加しました | |
| [12/09/20 20:27:50] くいなちゃん が daisukeegg を会話に追加しました | |
| [12/09/20 20:27:52] くいなちゃん が basshi-13 を会話に追加しました |
Many of us use the OverloadedStrings language extension on a regular basis. It provides the ability to keep the ease-of-use of string literal syntax, while getting the performance and correctness advantages of specialized datatypes like ByteString and Text. I think we can get the same kind of benefit by allowing another literal syntax to be overloaded, namely lists.
The simplest example I can think of is allowing easier usage of Vector:
[1, 2, 3] :: Vector Int
In order to allow this, we could use a typeclass approach similar to how OverloadedStrings works:
| import qualified Data.Foldable as F | |
| import Data.Foldable (Foldable) | |
| import Control.Monad | |
| import Control.Monad.Trans | |
| import Control.Applicative | |
| -- for main | |
| import System.Random | |
| data Proc' r a = Return r | Break | Continue | Transitional a |
| s x y z = x z (y z) | |
| k x y = x | |
| i = s k k | |
| c = s (s (k (s (k s) k)) s) (k k) | |
| b = s (k s) k | |
| hello = | |
| s(s(k s)(s(k k)(s(k s)(s(k(s(k s)))(s(s(k s)(s(k k)(s(k b)i)))(k(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s | |
| b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(c k)))))))))))))))))))))))))))))))))))))))))) | |
| )))))))))))))))))))))))))))(s(s(k s)(s(k k)(s(k s)(s(k(s(k s)))(s(s(k s)(s(k k)(s(k b)i)))(k(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s |
| // #define DEBUG | |
| #ifdef DEBUG | |
| #define dprintf(format, ...) fprintf(stderr, format, __VA_ARGS__) | |
| // #define dprintf(format, ...) do{ fprintf(stderr, format, __VA_ARGS__); fflush(stderr); } while(0) | |
| // 後者はfflushも同時に行うバージョン | |
| #else | |
| #define dprintf(format, ...) | |
| #endif |