{"id":43422169,"url":"https://github.com/youz/honestb","last_synced_at":"2026-02-02T18:54:35.640Z","repository":{"id":197009156,"uuid":"697795020","full_name":"youz/HonestB","owner":"youz","description":"The Honest B programming language","archived":false,"fork":false,"pushed_at":"2023-10-02T03:35:41.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-01-26T09:19:09.070Z","etag":null,"topics":["armoredcore6","esolang","functional-programming","lazy-k","ruby"],"latest_commit_sha":null,"homepage":"","language":"Harbour","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/youz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-09-28T13:46:03.000Z","updated_at":"2023-09-28T14:25:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"6bf854d2-0e4d-45a3-beeb-78fc35bb0fc7","html_url":"https://github.com/youz/HonestB","commit_stats":{"total_commits":12,"total_committers":1,"mean_commits":12.0,"dds":0.0,"last_synced_commit":"c9036ced612d0bfc03a9ea32f3d92ecdbf6c43b4"},"previous_names":["youz/honestb"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/youz/HonestB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youz%2FHonestB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youz%2FHonestB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youz%2FHonestB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youz%2FHonestB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/youz","download_url":"https://codeload.github.com/youz/HonestB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youz%2FHonestB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29017937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T18:51:31.335Z","status":"ssl_error","status_checked_at":"2026-02-02T18:49:20.777Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["armoredcore6","esolang","functional-programming","lazy-k","ruby"],"created_at":"2026-02-02T18:54:33.667Z","updated_at":"2026-02-02T18:54:35.634Z","avatar_url":"https://github.com/youz.png","language":"Harbour","readme":"# Honest B\n\n難読関数型プログラミング言語[Lazy K](https://tromp.github.io/cl/lazy-k.html)の方言です。\n\"スロー\" と \"クイック\" と \"❤\" のみでプログラムを記述します。\n\n## 文法\n\n```bnf\nProgram ::= Expr\n   Expr ::= \"スロー\" | \"クイック\" | Expr Expr \"❤\"\n```\n\n`スロー`はSコンビネータ、`クイック`はKコンビネータ、`❤` (U+2764 heavy black heart)は関数適用演算子です。\n関数適用は逆ポーランド記法で記述します。\n\n| Lazy K  | Honest B   | ラムダ式     |\n|---------|------------|--------------|\n| s       | スロー     | \\xyz. xz(yz) |\n| k       | クイック   | \\xy. x       |\n| `e1 e2  | e2 e1 ❤   | e1 e2        |\n\n関数適用では左側の式が引数、右側の式が関数となる事に注意してください。\nIコンビネータ ``` i = ``skk ``` をHonest Bに変換した時に`クイッククイックスロー❤❤`となるように\nしたかった為この順番になっています。\n\n`スロー`、`クイック`、`❤`以外の文字列は無視して読み飛ばします。\n❤は❤️のように異字体セレクタ(U+FE0E or U+FE0F)が付いていても問題ありません。\n\n## 入出力\n\nHonest BプログラムはLazy Kと同様に \"入力文字列を引数に取って出力文字列を返す関数\" となるように記述します。\n\n文字列はUTF-8エンコードのバイト列を[チャーチ数](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97#%E8%87%AA%E7%84%B6%E6%95%B0%E3%81%A8%E7%AE%97%E8%A1%93)のリスト([チャーチ対](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97#%E5%AF%BE))として表します。\n\n入力文字列は無限リストとなっており、実際の入力の終端以降はチャーチ数の256が無限に並びます。\n\n出力の終端は256以上のチャーチ数で表します。\n出力リストの終端文字以降の部分は無視するので、例えば出力リストが\n\n```\n(cons 65 (cons 256 \u003cチャーチ対ではない何かの関数\u003e))\n```\n\nというような構造になっていてもエラーにはなりません。\n\n\n## Honest Bプログラムの書き方\n\n手書きするのは非常に困難な言語なので、Lazy K -\u003e Honest Bコンパイラ[lazyk2hb](./lazyk2hb.rb)を用意してあります。\nなおLazy Kも手書き困難な言語ですが、Lazy Kコードを生成する既存のコンパイラがいくつかあるのでそれらを利用すると良いです。\n\n- **lazier** - Scheme -\u003e Lazy Kコンパイラ\n    - [Lazy Kリファレンス実装パッケージ (lazy-k.zip)](https://sange.fi/esoteric/essie2/download/)に同梱されている\n- **[hs2lazy](https://github.com/irori/hs2lazy)** - Haskell -\u003e Lazy K コンパイラ\n- **[LambdaCraft](https://github.com/woodrush/lambdacraft)** - CommonLisp -\u003e Binary Lambda Calculus / Universal Lambda / Lazy K コンパイラ\n- **[ELVM](https://github.com/shinh/elvm/)** - EsoLangVM Compiler Infrastructure\n   - C言語を色んなプログラミング言語や機械語にコンパイルする事のできるコンパイラインフラストラクチャで、Lazy Kへのコンパイルにも対応\n\n\n以下ではlazierとlazyk2hbを使ってHonest Bプログラムを生成する手順を説明します。\n\n1. Scheme処理系をインスールする\n    - lazierは大抵のScheme処理系で動作すると思いますが、このリポジトリ内にあるSchemeのサンプルコードは[Gauche](https://practical-scheme.net/gauche/index-j.html)向けに書いてあります。(Gauche v0.9.12 で動作確認済み)\n2. [lazy-k.zip](https://sange.fi/esoteric/essie2/download/)をダウンロードして適当なフォルダに展開する\n    - コンパイルに必要なファイルはlazier.scm, prelude.scm, prelude-numbers.scmの3つ\n3. Lazy Kパッケージ内のegフォルダにあるサンプルやこのリポジトリ内のSchemeコードを参考にしながらSchemeプログラムを書く\n    - 最終出力は `print-as-unlambda` 関数を使ってUnlambdaスタイルで出力する\n4. 2.のSchemeプログラムを実行し、出力結果を [lazyk2hb.rb](./lazyk2hb.rb) でコンパイルする\n\n```\n$ gosh myprog.scm \u003e myprog.lazyk\n$ ruby lazyk2hb.rb myprog.lazyk \u003e myprog.hb\n```\n\nもしくは\n\n```\n$ gosh myprog.scm | ruby lazyk2hb.rb \u003e myprog.hb\n```\n\n4. 完成\n\nlazyk2hb.rbを介さずにschemeプログラムからダイレクトにHonest Bプログラムを生成したい場合は\n[sample-hb.scm](./sample-hb.scm)を参考にしてみてください。\n\n\n## 実行方法\n\n要 ruby ver3.0以上\n```\n$ ruby honestb.rb myprog.hb\n```\n\n\n## サンプルコード\n\n### echo\n\n```\nクイッククイックスロー❤❤\n```\n\n実行\n```\n$ echo ご友人！ | ruby honestb.rb echo.hb\nご友人！\n```\n\n### Hello, world!\n\n```\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\nクイックスロー❤❤クイッククイックスロー❤❤スロー❤❤❤クイッククイックスロー\n❤❤クイッククイックスロー❤❤スロー❤❤❤クイック❤クイック❤クイッククイック\nスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤\n❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤スロー❤❤❤\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\n❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤クイック\nクイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイッククイックスロー❤❤\nクイックスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤クイック\nクイックスロー❤❤スロー❤❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\n❤スロー❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー\n❤❤❤クイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\nスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤クイッククイック\nスロー❤❤スロー❤❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー\n❤❤スロー❤❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤❤\nクイック❤スロー❤❤クイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤\nクイック❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤\n❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤\nクイッククイックスロー❤❤スロー❤❤❤クイックスロークイック❤スロー❤❤スロー\n❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイック❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\nクイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤スロー\n❤❤クイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイック\nクイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイックスロー\nクイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤クイッククイックスロー\n❤❤スロー❤❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤\nスロー❤❤クイック❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\n❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤クイック\nクイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイッククイックスロー❤❤\nクイックスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤クイック\nクイックスロー❤❤クイッククイックスロー❤❤スロー❤❤スロー❤❤❤クイック\nスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤クイックスロー\nクイック❤スロー❤❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\n❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤スロー❤❤\nクイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイック\nクイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイック\nスロー❤❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤スロー\n❤❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイック❤スロー❤❤クイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤\nクイック❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤\n❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤\nクイッククイックスロー❤❤スロー❤❤❤クイックスロークイック❤スロー❤❤スロー\n❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイッククイックスロー❤❤クイッククイックスロー❤❤クイッククイックスロー❤❤\nスロー❤❤スロー❤❤❤クイックスロークイック❤スロー❤❤スロー❤❤❤❤クイック\n❤クイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイッククイック\nスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイックスロークイック❤\nスロー❤❤スロー❤❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー\n❤❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤\nクイック❤スロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\nクイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤スロー\n❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤クイッククイック\nスロー❤❤スロー❤❤スロー❤❤クイック❤クイッククイックスロー❤❤クイック\nスロークイック❤スロー❤❤スロー❤❤クイックスロークイック❤スロー❤❤スロー\n❤❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤❤クイック\nクイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイック\nスロー❤❤クイッククイックスロー❤❤スロー❤❤❤クイック❤スロー❤❤クイック❤\nクイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイッククイックスロー\n❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイックスロークイック❤スロー\n❤❤スロー❤❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤❤\nクイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック\nクイックスロー❤❤クイッククイックスロー❤❤スロー❤❤❤クイック❤スロー❤❤\nクイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイック\nクイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイック\nスロー❤❤クイッククイックスロー❤❤スロー❤❤❤クイックスロークイック❤スロー\n❤❤スロー❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤\nスロー❤❤クイック❤スロー❤❤クイッククイックスロー❤❤クイックスロークイック\n❤スロー❤❤スロー❤❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイック❤\nクイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤クイッククイックスロー\n❤❤クイックスロークイック❤スロー❤❤スロー❤❤クイッククイックスロー❤❤\nクイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤スロー❤❤❤\nクイックスロークイック❤スロー❤❤スロー❤❤クイックスロークイック❤スロー❤❤\nスロー❤❤クイッククイックスロー❤❤クイックスロークイック❤スロー❤❤スロー❤\n❤クイッククイックスロー❤❤クイッククイックスロー❤❤スロー❤❤❤クイック❤\nスロー❤❤クイック❤クイッククイックスロー❤❤スロー❤❤スロー❤❤クイック❤\n```\n\n実行\n```\n$ ruby honestb.rb hello.hb\nHello, world!\n```\n\n### FizzBuzz\n\n[fizzbuzz.hb](./fizzbuzz.hb)\n\n実行\n```\n$ ruby honestb.rb fizzbuzz.hb\n1\n2\nご友人…\n4\n素敵だ…\nご友人…\n7\n8\nご友人…\n素敵だ…\n11\nご友人…\n13\n14\nご友人…素敵だ…\n16\n\u003c中略\u003e\n97\n98\nご友人…\n素敵だ…\n```\n\n\n## LICENSE\n\nMIT License\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyouz%2Fhonestb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyouz%2Fhonestb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyouz%2Fhonestb/lists"}