テセウスとZipper[編集] 迷宮[編集] 「テセウス、何か手を打たなければならない。」ホメロス…Ancient Geeks株式会社の営業部部長は言った。テセウスはミノタウロスアクションフィギュア™を後ろの棚に入れてうなずいた。「今の子供たちはもはや古代神話に興味を持っていない、彼らはスパイダーマンやスポーンのような現代ヒーローが好きなんだ。」ヒーロー。テセウスは、迷宮からクレタ島に戻った英雄[1]だったから、どのくらいのものかをよく知っていた。しかし「現代ヒーロー」たちは現実的に現れるようなことはしなかった。何が彼らの勝因だったのか?とにかく、未払い金の問題が解決できなかった場合、株主たちはステュクス河を渡ってきてAncient Geeks株式会社を整理するだろう。 「閃いたぞ!テセウス、良い案がある!君のミノタウロスとの戦いの物語をコンピューターゲームにするんだ!どうだい?」ホメロス
関数型プログラミング言語については、以前にHaskellの本を読んでみたりして、興味はあったのだが正直あまり理解できてなかった。 『なっとく!関数型プログラミング』はScalaのコードで関数型プログラミングを説明している本だ。最近邦訳が発売されて話題になっていたので買って読んでみた。 www.seshop.com この本で入れ子のflatMap の説明から、Scalaの for 内包表記 を説明しているところを読んで、Haskell の do もこれかということに気がついた。 リストの場合 // 入れ子のflatMap val result = List(1, 2).flatMap { x => List(10, 20).flatMap { y => List(100, 200).map { z => x + y + z } } } // for内包表記 val result2 = for
A Lens is a functional concept which solves a very common problem: how to update a complex immutable structure. This is probably the reason why Lenses are relatively well known in functional programming languages such as Haskell or Scala. However, there are far less resources available on the generalization of Lenses known as "optics". In this slides, I would like to go through a few of these opti
LensでHaskellを もっと格好良く!2015/5/30 Lens&Prism勉強会 by ちゅーん(@its_out_of_tune)
Lens&Prism勉強会 私的まとめ by Yuji Yamamoto on June 9, 2015 もう開催から1週間以上経ってしまいましたが、Lens&Prism勉強会に行ってきたのでそのまとめ記事です。 当日しこしことっていたメモと記憶を頼りに、発表内容や個人的な気付きなどを書きます。 @gakuzzzzさんの「Lensの説明」 connpassには別のスライドが貼ってありますが、実際の中身はBeyond Scala Lensというスライドの日本語での解説でした。 要約するとこんな感じの表に収まるのですかね。 スライドではScalaでの呼び名で説明されてましたが、ここでは私向けにHaskellに訳しています。 -- 全てのsをaに変換でき、かつ全てのaをsに変換できる関数のペア Iso' s a: f :: s -> a, g :: a -> s -- 全てのsからaに変換できる
The Haskell programming language community. Daily news and info about all things Haskell related: practical stuff, theory, types, libraries, jobs, patches, releases, events and conferences and more...
Haskell 型クラス覚書(Functor、Applicative、Monad、Semigroup、Monoid、MonadPlus、Alternative)Haskell Haskell にあらかじめ備えられている型クラスは、それを知らなくても Haskell のプログラムを書き下すことは可能ですが、知っているとコンパクトに、再利用可能で、曖昧さのないようにプログラムを書き下すことができるようになります。実用的なライブラリの中核となるデータ型はほとんどの場合で Monad を含む複数の型クラスを実装しています。そのようなライブラリを使いこなすためには、型クラスの特性を知っておく必要があり、また自身で作成したデータ型に型クラスを実装するに際してもまた、型クラスの特性を知っておく必要があるわけです。 本記事では、Haskell のよく使う以下型クラスの覚書です。 Functor Appli
某所で オブジェクト指向 (OOP) における Visitorパターン について話されていたので、自分の関数型プログラミングのメモ用に整理してみたいと思います。 (Twitterで書くには少し長すぎたので、こちらに整理) 2021/01/10 EDIT: Church (Boehm–Berarducci) エンコーディングとVistorパターンについての具体的な事例は、こちらの記事が分かりやすいので、ご参照ください。 Haskell for all: The visitor pattern is essentially the same thing as Church encoding 概要 OOP における Visitor パターンは、関数型プログラミング的に言えば、(パターンマッチする)F代数によるμ再帰を Church encoding したもの。 つまり、 を関数適用して、結果 a
SRE チーム立ち上げ前に考えたこと・取り組んだこと / Considerations and Preparations Before Establishing an SRE Team
fix関数についての解説記事が少なかったので、頑張ってかき集めた情報をまとめておこうと思います。 内容としては、 fix関数 <- 今ココ MonadFixと再帰的do記法 ArrowLoopと再帰的arrow記法 を複数の記事に分けて紹介します。 fix関数なら大体知っているよっていう人は、説明を飛ばして、後ろの練習問題から始めても楽しいと思います。 fix関数の仕組みはいいから、使い方だけ教えて~~っていう人は、fix関数の活用法から始めると幸せかもしれません。 この記事に載せているソースコードは、モジュールのimport文を省いています。なので、実際に手元の環境で動かしてみるときは、次のimport文をソースコードの冒頭に追加して実行してください。 import Control.Monad.Fix -- fix関数をインポート import Control.Monad.State -
12月20 Dynamorphism 〜 Haskellでも動的計画法がしたい! 〜 カテゴリ:プログラミング言語AI研 この記事は rogy Advent Calenderの20日目の記事です また、この記事の単体のHTMLファイルがあります。 単体のHTMLファイルの方がスタイルが良い感じになっているので、出来ればそちらを読んでください。 1. はじめに1.1. まえがき この記事では、関数型プログラミングにおいて動的計画法(Dynamic Programming)を行う手法の一つである dynamorphism について解説します。 しかし、dynamorphism という概念はそれ単体で説明できるものではなく、F-代数 や catamorphism, anamorphism, hylomorphism, histmorphism などの各種概念を用いないと説明できないものです。そこ
Prelude には,const :: a -> b -> a という関数が定義されています.a -> b -> a という型は a -> (b -> a) のことなので,この関数を引数に適用すると,b -> a という型の関数になります.できあがった関数はどのような値 v :: b に適用しても,この関数を作るときに適用した引数を返します. ghci> :type const const :: a -> b -> a ghci> let k1 = const 1 ghci> k1 "Hoge" 1 ghci> k1 False 1 ghci> k1 undefined 1 ghci> let kHuga = const "Huga" ghci> kHuga "Hoge" "Huga" ghci> kHuga 2 "Huga" ghci> kHuga undefined "Huga"さて「
Haskellの型クラスは、うまく使えば高いパフォーマンスと抽象度を両立できる、優れた仕組みである。その使い方のコツは、決して理解の難しいものではない。 小さな性質、大きな恩恵 プログラマは大きなものを小さく見せがちだ。オブジェクト指向プログラミングに慣れている人がやりがちなアンチパターンとして、欲しい機能と、それを分割する基準が現実に寄りすぎていて、一つ一つが巨大というものがある。 普通のプログラミングではありえない例かもしれないが、たとえば家を作りたいことを考える。「ベッド」「箪笥」「台所」「冷蔵庫」「トイレ」「風呂」のように設備ごとに分けた抽象化をしたいと考えるだろう。確かにこれは理に適っているように見える。だが、これらの設備を型クラスでまとめるのは悪手だ。 風呂やトイレには水を利用できるという性質が、冷蔵庫には電気が必要だ。部屋と部屋は壁で仕切られ、場合によっては扉があるかもしれな
2018年11月10日、Haskell-jpが主催するイベント「Haskell Day 2018」が開催されました。純粋関数型プログラミング言語Haskellをテーマに、Haskellに興味のある人から入門者、ちょっとできる人まで、様々な層に向けたプレゼンテーションを行った本イベント。実務から研究まで、幅広いHaskellの事例を共有します。プレゼンテーション「Semigroupとは? Monoid? 環?」に登壇したのは、aiya000氏。講演資料はこちら Semigroupとは? Monoid? 環? aiya000氏(以下、aiya000):あいやと申します。今日は「Semigroupとは? Monoid? 環?」というテーマで代数についての発表をします。よろしくお願いします。 (会場拍手) 推しVimはNeovimです。活動はTwitterやGitHubなどをやっています。このスラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く