Skip to content

Instantly share code, notes, and snippets.

;; 第1回 Scheme コードバトン
;;
;; ■ これは何か?
;; Scheme のコードをバトンのように回していき面白い物ができあがるのを楽しむ遊びです。
;; 次回 Shibuya.lisp で成果を発表します。
;; Scheme 初心者のコードを書くきっかけに、中級者には他人のコードを読む機会になればと思います。
;;
;; ■ 2 つのルール
;;
;; (1)自分がこれだと思える変更をコードに加えて2日以内に次の人にまわしてください。
#!/usr/local/bin/gosh
;; 第1回 Scheme コードバトン
;;
;; ■ これは何か?
;; Scheme のコードをバトンのように回していき面白い物ができあがるのを楽しむ遊びです。
;; 次回 Shibuya.lisp で成果を発表します。
;; Scheme 初心者のコードを書くきっかけに、中級者には他人のコードを読む機会になればと思います。
;;
;; ■ 2 つのルール
;;
@nobsun
nobsun / GFizzBuzz.hs
Created August 9, 2012 02:17
generic FizzBuzz
module GFizzBuzz (gFizzBuzz) where
import Data.List
gFizzBuzz :: (Int,Int) -- range
-> [(Int,String)] -- spec of fizzbuzz
-> [String] -- generic FizzBuzz strings
gFizzBuzz r = narrow r . zipWith (#) [0..] . map concat . transpose . map gfizzs
@nobsun
nobsun / ifphex010203.hs
Created November 23, 2012 01:33
IFPH 練習問題 1.2.3 簡約系列の計数 ref: http://qiita.com/items/6566c006074005c12f88
-- | 式の定義
data Expr = Zero
| Pred Expr
| Succ Expr
deriving (Show,Read)
-- | Redex(簡約可能式)を数える.
countRedex :: Expr -> Int
countRedex Zero = 0
countRedex (Succ t) = case t of
@nobsun
nobsun / ifphex010203.hs
Created November 23, 2012 02:41
部分式に名前を付けるバージョン ref: http://qiita.com/items/341b5a2263719f3c8672
-- | 式の定義
data Expr = Zero
| Pred Expr
| Succ Expr
deriving (Show)
-- | 位置情報付き式
data AExpr' = AZero
| APred AExpr
| ASucc AExpr
@nobsun
nobsun / ifphex010204.hs
Created November 23, 2012 08:12
IFPH 練習問題 1.2.4 簡約系列の列挙 ref: http://qiita.com/items/ffd0dab664422ed2b079
-- | 式の定義
data Expr = Zero
| Pred Expr
| Succ Expr
| Add (Expr, Expr)
deriving (Show)
data AExpr' = AZero
| APred AExpr
module Main where
import System.Environment
main :: IO ()
main = mapM_ numbering =<< getArgs
numbering :: FilePath -> IO ()
numbering f = putStr . unlines . zipWith number [1..] . lines =<< readFile f
number :: Int -> String -> String
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
module AdventCalendar2012 where
テキストファイルを指定するとそのファイル名と,行番号をふった内容を印字するプログラムを作成せよ.
ただし,ファイルは複数指定できるものとし,行番号は(そのファイルでの)残りの行数を表す数である.
(対象ファイルがn行からなる場合,n-1から0までの番号が降順にふられる.)
{-# LANGUAGE FlexibleInstances #-}
instances Num (a -> Maybe b) where
fromInteger 1 = const Nothing
a = Nothing
ex = a >>= 1