タグ

2023年3月28日のブックマーク (11件)

  • 状態モナド遊び - あどけない話

    状態をモナドで実現する方法を考えます。 リスト 例は簡単な方がいいので、データ構造として Lisp 風のリストを定義しましょう。 data List a = Nil | Cons a (List a) deriving Show リストは、こんな風に表せます。 Cons "c" (Cons "b" (Cons "a" Nil)) Lisp 風の cons も定義してみましょう。 cons :: a -> List a -> List a cons x xs = Cons x xs cons "c" $ cons "b" $ cons "a" Nil → Cons "c" (Cons "b" (Cons "a" Nil)) 状態を持つリスト さて、この Lisp 風のリストに、要素の数を覚えさせておきたいとしましょう。もちろん、数えれば分りますが、数えなくても一瞬で分るようにしたいのです。

    状態モナド遊び - あどけない話
  • Haskell ポインタープログラミング - あどけない話

    早いもので、今年も12月25日となりました。メリークリスマス! うちのちびっ子怪獣たちも、サンタさんに書いた手紙通り、レゴをもらってご満悦のようです。 そして今日は、Haskell Advent Calendar 2013 の最終日でもあります。 Haskellらしい? 「純粋なコードで構成するのが Haskell らしいプログラムであり、IOはHaskellらしくない」という発言をよく耳にします。 確かに、命令プログラミングの世界から関数プログラミングの世界にやってきたとしたら、 不変データを使った永続データプログラミング 部品プログラミング 純粋なコードに対する性質テスト などには、衝撃を受けることでしょう。 でも、純粋なコードは、Haskell の世界の半分でしかありません。そこは、コンパイラーという保護者に守られた未成年の世界です。Simon Peyton Jones さんの言葉を

    Haskell ポインタープログラミング - あどけない話
    l-_-ll
    l-_-ll 2023/03/28
    "この記事では、Haskellを型安全なCとして使い、メモリーを操作する方法について説明します。"
  • 関数型言語での関数の基礎知識 - あどけない話

    関数型言語での関数について、Haskell を用いて説明します。 関数の型 関数の型は、-> を使って書きます。例えば、Int を Char に変換する chr という関数の型は、以下のようになります。 chr :: Int -> Char 一引数の関数の型は、まぁこんなもんだと思えるでしょう。びっくりするのは、引数が増えたときです。たとえば、replicate という関数の型を見てみましょう。 replicate :: Int -> a -> [a] replicate は、第二引数で指定されたデータを第ー引数に指定された個数分用意して、リストにして返す関数です。([] は配列ではなく、リストです。) 次のように動きます。 > replicate 3 "foo" → ["foo","foo","foo"] a は型変数といって、任意の型を取れます。なじめない人は、具体的な型を当てはめてみ

    関数型言語での関数の基礎知識 - あどけない話
  • Haskellの文法(分岐編) - あどけない話

    僕が Haskell を学び始めた頃、Haskell の文法はすんなりとは頭に入ってきませんでした。もともと僕はプログラミング言語の学習能力が低いので、僕だけかもしれませんが、「はじめからこう言ってもらえれば分かったのにぃ」ということを書きます。 はじめの一歩 分岐は case で書きます。以下に Maybe a に対する例を書きます。 case mx of Just x -> ... Nothing -> ... 念のため、Maybe a の定義も見てみましょう。 data Maybe a = Nothing | Just a 列挙されているデータ構成子を case に列挙できることが分かるでしょう。このように、case でマッチできるのは、データ構成子で表現されたパターンになります。 ワイルドカード たとえば、以下のような型を定義したとします。 data Foo = A | B | C

    Haskellの文法(分岐編) - あどけない話
  • Haskell から見た node.js - あどけない話

    誤訳 以前、「サーバサイドJavaScriptのNode.js、最初はCやHaskellを検討し失敗。開発者ライアン・ダール氏へのインタビュー」という記事が twitter で話題になっていました。 ―― なぜJavaScriptを選んだのでしょう? ダール氏 実は最初は違いました。最初はC、Lua、Haskellなどで失敗していました。そんなときV8(Chromeが採用しているJavaScriptエンジン)に気がついて、やろうとしていることに対してJavaScriptが完璧な言語だと突然ひらめいたのです。 ただでさえ、Haskell は遅いと誤解されているのに、このような悪意さえ感じらえる訳だと、さらに誤解が深まりそうです。原文にはこう書かれています。 Dahl: Originally I didn’t. I had several failed private projects doi

    Haskell から見た node.js - あどけない話
    l-_-ll
    l-_-ll 2023/03/28
    "僕の経験では、ネットワークのコードを Haskell で書くと C と同等かそれ以上の速度が出ます" "Haskell のユーザスレッドのオーバヘッドは15ワード+スタック+αです。入出力を起こさないなら10万個生成しても問題ありません"
  • Haskellの講義に関するQ&A - あどけない話

    岡山大学で、関数プログラミングの講義を一コマ担当しました。資料は、函数プログラミングの集いで使った関数プログラミングの道しるべを流用しました。ちゃんと用意しなくて、講義を受けた学生には申し訳ないです。 講義内容に関して質問を頂きました。同じような疑問を持つ人も多いと思いますので、担当教官の許可を得てここに公開します。 永続データプログラミングの意義は分かったが,破壊しないと効率が悪いのではないですか.配列のような構造が世の中には多い気がします.メモリは足りなくなりませんか. 基的に永続と呼ばれているデータは、共有の効率が高く、しかも不要になった部分はすぐに GC に回収されます。また、GHC の GC はすごく優秀であることが知られています。 Haskell では、下位のレイヤーではデータを破壊できて、たとえば固定長のバッファーを使い回すといったことも可能です。ただ、それは普通のプログラ

    Haskellの講義に関するQ&A - あどけない話
  • Haskell の Monad とは言語内DSLのフレームワークである - あどけない話

    この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の利用者に分かるかは不明です。 Haskellを勉強したのですから、 代数データ型 型クラス は分かっていることにします。Monad は、単なる型クラスの一つで、それ以上でもそれ以下でもありませんから、この二つが分かってないと話になりません。 また、言語内DSL(以下、DSLと略記)という考え方を知っていることも仮定します。Monad とは、DSLのフレームワークという直感を与えるのが、この記事の主眼ですからね。 さらに、構造化定理をいう単語を聞いてもビビらない人を想定しています。逐次、反復、分岐があれば、計算しうる計算はすべて記

    Haskell の Monad とは言語内DSLのフレームワークである - あどけない話
  • ChatGPTプロンプトエンジニアリングのコツ8箇条~OpenAI公式のベストプラクティスから学ぶ~ - Qiita

    はじめに OpenAI API (ChatGPT含む) のプロンプトエンジニアリングのベストプラクティスが公式から出ているのを知り、和訳しながら読んでいきたいと思います! プロンプトエンジニアリング8箇条 (忙しい人向け) 最新のモデルを使用する 指示をプロンプトの最初に配置し、###または"""で指示と文脈を分ける 望む文脈、結果、長さ、形式、スタイルなどについて具体的で詳細に記述する 例を使って望む出力形式を明示する ゼロショットから始め、効果がなければファインチューニングを行う 曖昧で不正確な表現を減らす やってほしくないことだけでなく、代わりにやってほしいことも記述する コード生成には、特定のパターンに誘導する「leading words」を使用する How prompt engineering works (プロンプトエンジニアリングの仕組み) インストラクション・フォロー・モデ

    ChatGPTプロンプトエンジニアリングのコツ8箇条~OpenAI公式のベストプラクティスから学ぶ~ - Qiita
  • 【ChatGPT】海外でバズったヤバい使い方9選【2023年3月版】 | WEEL

    ChatGPTでインテリアデザインを出力 この記事では、CnatGPTとほかのツールを連携させて高品質なインテリアデザインを出力させる方法が紹介されています。 ok, I got ChatGPT working with Additive Prompting Here's a 1 paragraph ChatGPT prompt you can use to generate infinite interior design/architecture photographs w/ 90%+ coherence to the prompt in Midjourney Full prompt w/ examples in thread. Try reading the prompts as you go 🧵 pic.twitter.com/zhGB03UGpD — Nick St. Pier

  • ChatGPTが新着論文を要約し毎朝メールしてくれる仕組みの作り方 | Antaa Slide

    2024年3月13日追記 ・OpneAIAPI課金システム変更に伴うエラーについて解説。 10月26日追記 ・メールが届かなくなった際に権限の再承認が必要な件。 5月11日追記 ・検索にかかった論文に抄録がない場合、AIが要約を創造(捏造)する件。 4月21日追記 ・作り方のサイトではなく公開されたLINE Botのリンクに切り替え。 ・エラ−429が出た場合4のスライドを追加。 4月10日追記 ・送信トリガーの変更方法のスライドを追加。 ・複数キーワードや雑誌を指定して検索する方法のスライドを追加。 デモコードは、 const PUBMED_QUERY = '(aaa) AND (bbb) AND (("ccc"[Journal]) OR ("ddd"[Journal]))' ・エラー原因をChatGPTに聞くコツについても追記。 4月6日追記 ・エラー429が出た場合の対処法スライド

    ChatGPTが新着論文を要約し毎朝メールしてくれる仕組みの作り方 | Antaa Slide
  • 大規模言語モデルで変わるMLシステム開発

    GPTはじめ大規模言語モデルの登場により、MLシステム開発にもパラダイムシフトが起こっています。流れが速すぎてやや混沌としてきたので、プロンプトエンジニアリングの考え方をはじめとした新しい概念について有用な引用と共に交通整理をしてみました。 今から始めたい人はまずこれを読むと、どんな点に配慮すべきかが…

    大規模言語モデルで変わるMLシステム開発