タグ

lisp*に関するsh19910711のブックマーク (169)

  • Clojureに入門したら知っておきたいN個のこと - lagénorhynque

    Clojureのデータ構造は抽象をもとに設計されているため、どのような抽象があるのか把握しておくことは重要です。

    Clojureに入門したら知っておきたいN個のこと - lagénorhynque
    sh19910711
    sh19910711 2024/06/19
    "Clojureのデータ構造は抽象をもとに設計されているため、どのような抽象があるのか把握しておく / 多機能のライブラリや「フレームワーク」よりも単機能に特化した小さなライブラリの組み合わせが好まれる傾向" 2019
  • Common LispにThreaded Macroを実装する - Doge log

    PythonからいいところをひとつもってこれたのでClojureからももってくる。 Clojureでは数珠つなぎで処理する場所はわかりやすくThreaded Macroを使って書くことが多い。 これはわかりやすいのでCommon Lispでも実装しておく。 (defmacro -> (x &optional form &rest more) (cond ((not (null more)) `(-> (-> ,x ,form) ,@more)) ((not (null form)) (if (listp form) `(,(first form) ,x ,@(rest form)) (list form x))) (t x))) (defmacro ->> (x form &rest more) (cond ((not (null more)) `(->> (->> ,x ,form) ,

    Common LispにThreaded Macroを実装する - Doge log
    sh19910711
    sh19910711 2024/06/19
    "Clojureでは数珠つなぎで処理する場所はわかりやすくThreaded Macroを使って書くことが多い / Clackなどのmiddlewareを書く際にもThreaded Macroの方がわかりやすいんじゃないか" 2013
  • 「コンパイラ: 原理と構造」の型推論をClojureで書いた

    「コンパイラ: 原理と構造」の型推論をClojureで書いた コンパイラ: 原理と構造 というを読んだ。最近はの内容を3秒ほどで忘れてしまうので、 少しでも記憶を定着させるため手を動かすことにした。 大昔に決定性有限オートマトンを作ったり、 LALR構文解析器を作ったりするプログラムを(Common Lispのマクロとして) 書いたことがあるので字句解析と構文解析はすっ飛ばして、 いきなり型推論をするプログラムを書くことにした。型推論を書くのは初めてだ。 ではSML#を使っているが、「最も稼げる言語はClojure」という噂を聞いたので Clojureで書いてみることにした。Clojureを書くのも初めてだ。 できあがったもの user> (type-inf-defs '((def fdec (fn p (tuple (- (get p 0) 1) (get p 1)))) (def

    sh19910711
    sh19910711 2024/06/19
    "括弧の数が少なかったりassocが探索ではなく追加をする関数だったりするのは、 人のソースコードを読むときは気持ち悪く感じたが、 自分で書くときは案外違和感なく書けた" 2021
  • 最近Clojureでテストを書くときに使っているライブラリをふたつ紹介します - Uzabase for Engineers

    こんにちはこんにちは!!あやぴーです。 最近の仕事ではF#を使ったり、Clojureを使ったりすることが多いのですが、今日は久しぶりにClojureの話を書きます。 Clojureでテスト書くときに一緒に使うライブラリ何使ってますか? テスト対象が依存する関数をモックしたい - mockfn 複雑なデータ構造のdiffを簡単に知りたい(あるいはデータ構造の比較を簡単にやりたい) - matcher-combinators モックした関数が取る引数をスマートに制限したい - mockfn & matcher-combinators まとめ Clojureでテスト書くときに一緒に使うライブラリ何使ってますか? アプリケーションでユニットテストレベルのテストを書くとき、どういうライブラリを一緒に使っていますか?Kaocha?Midje?test.check?shrubbery?Flare? 今回

    最近Clojureでテストを書くときに使っているライブラリをふたつ紹介します - Uzabase for Engineers
    sh19910711
    sh19910711 2024/06/19
    "関数の中で関数を呼び出すというような単純な実装 / オブジェクト生成時に外部から依存するオブジェクトをインジェクションして、テストをしやすいようにするというような実装を行うことはあまり多くありません" 2022
  • Loomを用いたグラフ・ネットワーク分析 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Loomを用いたグラフ・ネットワーク分析 - Qiita
    sh19910711
    sh19910711 2024/06/19
    "Loomは純Clojureで実装されており、基本的なネットワーク分析に必要な機能がそろっています / 一方で、Loomにはページランクなどの中心性の計算のような高度なアルゴリズムが実装されていません" 2016
  • Clojureとヤマハルーター - Qiita

    これは Clojure Advent Calendar 2018 6日目の記事です。 こんにちは。インフラエンジニアの @notake です。 ヤマハルーターRTX1210に接続されているDHCPクライアントの一覧が必要になったため、リース情報を吸い出すためにClojureを活用した話を書きたいと思います。 記号 記事では複数種類のターミナルを扱いますので、区別できるよう記号を定義します。 $: LinuxまたはmacOSのターミナルに入力するコマンドです。 >: ヤマハルーターの通常ユーザーで入力するコマンドです。 #: ヤマハルーターの管理者権限で入力するコマンドです。 user=>: ClojureのREPLです。 ヤマハルーターにSSHする ルーターから情報を吸い出すには、当然ながら何かしらの手段でルーターに接続する必要があります。 ヤマハルーターに接続するには、シリアルポートを

    Clojureとヤマハルーター - Qiita
    sh19910711
    sh19910711 2024/06/19
    "ルーターから情報を吸い出すには、当然ながら何かしらの手段でルーターに接続する必要 / ヤマハルーターの構成管理をClojureから行ったり、ルーターのファイアウォールをednで定義できるかも" 2018
  • キメる Clojure チーム開発 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? この記事は Clojure Advent Calendar 2019 18 日目の記事です。二年前に書いたキメるClojure高速開発が未だに読まれている気配があるので、情報を最新化し、現時点での意見をまとめようと思います。 当時の意見は特に Clojure 開発の高速性に注目し、短いスパンで進める個人開発に特に向いているというものでした。一方で経験にないため憶測でしたが、チームで進める中規模以上の開発にはあまり向かないのではないかと考えていました。しかし現在はチームとして Clojure を使って開発を行っているため今回はその観点から

    キメる Clojure チーム開発 - Qiita
    sh19910711
    sh19910711 2024/06/19
    "Clojure には型を捨てて余りあるチーム開発を支える言語特性がある / 人の書いたコードを理解するオーバーヘッドが比較的少ない / Clojure の「全てがデータ」という特性はチーム開発と相性がいい" 2019
  • ClojureのDuctとClojureScriptのre-frameによるREST API + SPA開発入門 - Qiita

    Java (JVM)環境でのClojureとJavaScript環境でのClojureScriptを組み合わせると、典型的なWebアプリケーションのサーバサイドもフロントエンドもほぼ同等の言語で開発できるというのはClojureの魅力のひとつですが、日語でも英語でも入門者向けにそのようなフルスタックなClojure開発のしかたを解説するリソースはまだ多くないようです。 今回は国内Clojurianの間でも人気のサーバサイドフレームワークDuct、ClojureScriptのReactラッパーReagentを基礎としたフレームワークre-frameを利用して、REST API + SPAという構成でTODOアプリを開発する例をご紹介します。 ビルドツールとしてサーバサイドの開発にはLeiningen、フロントエンドの開発にはshadow-cljsを使うことにします(開発/実行環境としてJa

    ClojureのDuctとClojureScriptのre-frameによるREST API + SPA開発入門 - Qiita
    sh19910711
    sh19910711 2024/06/19
    "Java (JVM)環境でのClojureとJavaScript環境でのClojureScriptを組み合わせると、典型的なWebアプリケーションのサーバサイドもフロントエンドもほぼ同等の言語で開発できるというのはClojureの魅力のひとつ" 2020
  • 簡易LISP処理系の実装例(Clojure版) - Qiita

    【他言語版へのリンク記事】簡易LISP処理系の実装例【各言語版まとめ】 この記事は,Clojureによる二種類の原初LISP評価器("McCarthy's Original Lisp")の実装をまとめたものです. コンスセル未対応版 ClojureはS式入出力を扱うプログラミング言語のため,LISP評価器の実装自体は容易ですが,他のLISP系言語と異なりリスト構造はコンスセルに基づくものではなく,ドット対表現も利用できません.この版では,リスト構造を基データ構造としつつ,『原初LISP評価器の機能に相当するClojureの機能のみで原初LISP評価器を定義』しています.具体的には次の通りです. 実装は' seq? = cons first rest cond defnを使用 機能はquote atom eq cons car cdr cond lambdaを提供 S式入力はClojure

    簡易LISP処理系の実装例(Clojure版) - Qiita
    sh19910711
    sh19910711 2024/06/19
    "ClojureはS式入出力を扱うプログラミング言語のため,LISP評価器の実装自体は容易ですが,他のLISP系言語と異なりリスト構造はコンスセルに基づくものではなく,ドット対表現も利用できません" 2020
  • Clojureの剰余を求める関数、remとmodの違い - Qiita

    はじめに FizzBuzzの実装のため、色々とリファレンスや技術記事を調べ、読み込んでいったのですが、 剰余を求める関数が『rem』『mod』と複数存在していることを知り、その違いについて戸惑ってしまいました。 今回は、これら2つの関数の違いについて調べたことを書きます。 remとmodの違いとは 結論から先に述べます。 remとmodでは、剰余の正負の符号決定のされ方が異なっており、 remでは被除数、modでは除数と同じ符号となるように剰余が計算されます。 そもそも負の数が割り算にでてくるってどういうこと? "そもそも負の数を割る、負の数で割るってなんなんだ!" という方は、 下記サイトが参考になりましたので、ぜひ御覧ください。 私も数学に明るくないため、今回FizzBuzzを実装するまで知りませんでした。 負の数の割り算と余り ~整数と余りの問題【数学まるかじり】 remとmodで、

    Clojureの剰余を求める関数、remとmodの違い - Qiita
    sh19910711
    sh19910711 2024/06/19
    "剰余を求める関数が『rem』『mod』と複数存在していることを知り、その違いについて戸惑ってしまい / remとmodでは、剰余の正負の符号決定のされ方が異なっており、remでは被除数、modでは除数と同じ符号となる" 2020
  • Clojureマクロの書き方 - Qiita

    はじめに ClojureはJavaなど他の言語にはないユニークな機能が色々と備わっています。そのなかでも一際特徴的に思えるのがマクロです。マクロは強力な機能に思える反面、Clojure初学者にとっては少々難しい機能に思うので、初歩的な内容を整理してみました。かくいう私もClojure初学者です。 はじめの一歩 簡単なサンプル マクロを新しく定義するには defmacro を使います。次のマクロは引数で渡されたフォームの評価前と後にコンソール出力を行います。 (defmacro with-log [form] (list 'do (list 'println "Start") form (list 'println "End")))

    Clojureマクロの書き方 - Qiita
    sh19910711
    sh19910711 2024/06/19
    "ClojureはJavaなど他の言語にはないユニークな機能が色々と備わっています。そのなかでも一際特徴的に思えるのがマクロ / マクロを使うことでClojure自身をカスタマイズできる" 2021
  • Clojureで快適なREPL駆動開発のために"reloaded workflow"を実践しよう - Qiita

    ClojureといえばREPL駆動開発(REPL-driven development)によるインタラクティブで高速な開発スタイルが大きな強みですが、その開発体験(DX; developer experience)をより良くするためにClojure開発環境の特性を反映した"reloaded workflow"というものが知られています。 このワークフローを実現するためのライブラリの組み合わせや設定のしかたは多様ですが、記事では最もオーソドックスなtools.namespace + Integrant/Component/mountでの構成例をご紹介します。 サンプルコードlagenorhynque/reloaded-workflow-examplesは適宜参考に、ご自身の開発スタイルに合ったプロジェクト構成やエディタ設定をぜひ考えてみてください(お気に入りの構成が見つかったらプロジェクト

    Clojureで快適なREPL駆動開発のために"reloaded workflow"を実践しよう - Qiita
    sh19910711
    sh19910711 2024/06/19
    "ClojureといえばREPL駆動開発によるインタラクティブで高速な開発スタイルが大きな強み / REPLを再起動することなくソースコードの変更をリロードしアプリケーションを安全に再起動できる仕組みを整える" 2021
  • Clojure で Kafka Streams アプリケーションを書く - Qiita

    この記事は Kafka Advent Calendar 2021 の11日目の記事です。 前回の記事で紹介した Kafka Streams アプリケーションをClojureで書いてみました。 Jackdawという Kafka Streams の Clojure ラッパーライブラリを使っています。 テスト環境構築 手軽に手元で試したいので、Kafka の Quick start に従い環境構築します。

    Clojure で Kafka Streams アプリケーションを書く - Qiita
    sh19910711
    sh19910711 2024/06/19
    "Jackdaw: Kafka Streams の Clojure ラッパーライブラリ / Streams DSL が clojure 関数にラップされており、それらは builder か kstreams を第一引数に取るため、スレッディングマクロで簡潔ににトポロジーを書き下せます" 2021
  • アルゴリズム設計に欠かせない問題解決のための「還元」 with Clojure - Qiita

    システムエンジニアプログラマーは、問題解決に取り組むことが主な仕事ですが、 直面する問題解決に取り組む中で、過去に似たような問題に出会っていたことに気が付くことがよくあると思います。 この記事では、問題を別の問題に置き換えて考えることを言語化した、計算理論の世界の「還元」という概念を紹介しようと思います。 紹介の中で使うコードは、今の仕事で使っているClojureで書きました。(Clojureがわからなくても内容は理解できると思います) また、個人的な解釈を含むので、誤っている場合があります。個人的な解釈については、「~ていそうです」「~と思いました」「~な気がします」みたいな表現になっています。 1. 還元(reduce) 還元(reduce)とは、ある計算問題Aを別の計算問題Bに変換することです。 問題解決においては、 「この問題(A)って要はあの問題(B)なのでは?」 「あの問題(

    アルゴリズム設計に欠かせない問題解決のための「還元」 with Clojure - Qiita
    sh19910711
    sh19910711 2024/06/19
    "問題を別の問題に置き換えて考えることを言語化した、計算理論の世界の「還元」という概念 / 「この問題(A)って要はあの問題(B)なのでは?」「あの問題(B)さえ解ければ、この問題(A)が解ける」みたいな" 2021
  • ClojureのerlangバインディングであるClojerlを動かす - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    ClojureのerlangバインディングであるClojerlを動かす - Qiita
    sh19910711
    sh19910711 2024/06/19
    "Clojerl: Clojureのerlangのバインディング / Erlangは安全で信頼性の高い、スケーラブルなシステムを構築 + イミュータブルで永続的なデータ構造を提供し、並行処理の機能 / 一方、Clojureが提供するものはLispそのもの" 2022
  • Clojure の mean を高速化できなかった - Qiita

    まとめ Clojureの速度が気になったのでJuliaを使ってみたが、Clojureが忘れられず、partitionやreductionsをJuliaで書いていた。そこに手間をかけるのであれば、Clojureの高速化にひと手間かけても良いのではないかと考えた。 しかし、シーケンスの平均値を取る操作を長いベクタに対して行った際、その実行時間を満足いくまで縮めることができなかった。更に縮めるためには恐らくデータ構造を変える必要があり、それはClojureの良さを殺してしまうように思われるので、やはりJuliaを使おう思う。 5000万個のランダム値に対する平均を取る操作の比較が下記。Clojureが4.7秒に対し、Juliaは0.37秒。素のPythonが26秒で、Numpyは0.39秒。Common Lispは大体1.75秒。

    Clojure の mean を高速化できなかった - Qiita
    sh19910711
    sh19910711 2024/06/19
    "速度が気になったのでJuliaを使ってみたが、Clojureが忘れられず、partitionやreductionsをJuliaで書いていた。そこに手間をかけるのであれば、Clojureの高速化にひと手間かけても良いのでは" 2023
  • Clojure の Transducer を勉強する - Qiita

    はじめに Clojure を触り始めて半年ほどが経ちました。 とはいっても、私の所属はインフラチームなので、他のソフトウェアエンジニアの方々と比べると Clojure に触れる機会は少し少なめです。会社で使用しているメイン言語は Clojure ですが、インフラエンジニアは多種多様な知識やツールを使うので、相対的に Clojure でバリバリコーディングするタスクは少なくなるのです。 そんなこんなで、放っておくとせっかく覚えた Clojure のことをいつの間にか忘れてしまいそうなので、時々自分から学びに行かなくてはと思っていたところ、会社の Clojure つよつよエンジニアの方から Transducer について教えていただく機会がありました。 せっかくなので、そこでお聞きした話をベースに、自分でも改めて Transducer について調べてまとめてみることにしました。あくまで Tra

    Clojure の Transducer を勉強する - Qiita
    sh19910711
    sh19910711 2024/06/19
    "map や filter といったシーケンス関数を、シーケンスを渡さずに引数1つだけで呼び出すと Transducer が返ってきます / 「こんな変換をしてね」という命令だけを取り出した、というイメージ" 2023
  • より自由なFreerモナドをSchemeに - Qiita

    Free モナドを使うと Functor f からモナド則を満たす Free f が得られる。 Freer Monads, More Extensible Effects の Freer1 モナドを使うと、 Functor であることすら必要とせずモナドが得られると聞いたので Scheme (Gauche)で実装してみた。 (ちなみに、 Freer モナドの定義は2013年ごろに話題になった Operational モナドと同一である。 Operational モナドを知っている人にはこの記事で得られるものは少ないかもしれない。 Operational については例えば Freeモナドを超えた!?operationalモナドを使ってみようなどを参照。元論文はさらに Operational モナドの効率的な実現法や Extensible Effects との組み合わせについて扱っている) F

    より自由なFreerモナドをSchemeに - Qiita
    sh19910711
    sh19910711 2024/06/18
    "Free モナドを使うと Functor f からモナド則を満たす Free f が得られる / Scheme でモナドを書こうとするとメタ情報が足りないために、文脈に応じて return の実体を決めるという Haskell 的なやり方が使えない" 2015
  • Goで小さなScheme、Gigueを実装しました - Qiita

    $ gigue > (+ 1 2) 3 > (define (mul x y) (* x y)) > (mul 2 3) 6 > (define a (mul 1 2)) > (- 10 a) 8 > (define (square x) (* x x)) > (print (square 3)) 9 > (define x 'kuke) > (print x) kuke > (load "./examples/sum.scm") > (print (sum 1 2)) 3 > (define x (lambda () (print 'hoge))) > x {[] [print hoge] 0xc820014300} > (x) hoge > (define p (list 1 2 3)) > (car p) 1 > (cadr p) 2 > (caddr p) 3 機能 +, -, *

    Goで小さなScheme、Gigueを実装しました - Qiita
    sh19910711
    sh19910711 2024/06/18
    "GoでSchemeインタプリタを実装してみる / Lexerは text/scanner でやるとして、Parserは渡された文字列を扱えば良い / どこまでがLexerの仕事で、どこからがParserの仕事なのかわからなくなってしまい" 2015
  • LISP(Scheme)でProject Eulerを解いてみる - Qiita

    この記事はLisp Advent Calendar 2016の3日目の記事です. 2日目の記事は「R7RS-largeについて」でした. 記事はProject EulerのProblem1〜5のネタバレを含みます.ご注意ください 初めに 今までLISPはわず嫌い的に敬遠していたのですが,最近大学の授業でSchemeを使う機会があり,いざちゃんと勉強してみると結構面白くて,ずぶずぶと沼にハマっていく音が聞こえてきました.ちなみに最近LoL買っちゃいました😉 Schemeを最初に触ってから1ヶ月くらい経ったあたりでなんとなくProject Eulerを解いていたので,この記事ではそのコード片を紹介したいと思います.なお,記事のコードは全てGitHubにあげています(今後も継続的にcommitしていく予定です). kagemiku/project-euler (カレンダーに登録してから

    LISP(Scheme)でProject Eulerを解いてみる - Qiita
    sh19910711
    sh19910711 2024/06/18
    "今までLISPは食わず嫌い的に敬遠していたのですが,最近大学の授業でSchemeを使う機会があり,いざちゃんと勉強してみると結構面白くて,ずぶずぶと沼にハマっていく音が聞こえてきました" 2016