以下の短い例は、 sed
のような正規表現アプローチと比較して、 comby がどのようにマッチングと書き換えを簡素化するかを示しています。
brew install comby
bash <(curl -sL get-comby.netlify.app)
その他の Linux ディストリビューション: PCRE ライブラリは Ubuntu バイナリに動的にリンクされます。 Arch Linux などの他のディストリビューションの場合は、 sudo ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3
という修正が必要です。 Fedora では、 sudo ln -s /usr/lib64/libpcre.so /usr/lib64/libpcre.so.3
を使用します。あるいは、ソースからビルドすることを検討してください。
bash <(curl -sL get.comby.dev)
を実行します。docker pull comby/comby
stdin
で docker を使用して実行:
docker run -a stdin -a stdout -a stderr -i comby/comby ' (:[emoji] hi) ' ' bye :[emoji] ' lisp -stdin <<< ' ( hi) '
時々、そうです。ただし、小さな変更やリファクタリングは、ネストされた式、コメント、文字列によって複雑になることがよくあります。次の C 風のスニペットを考えてみましょう。 2 つのif
条件を値1
に書き換えるのが課題だとします。 2 つの if 条件式の内容と、その 2 つだけに一致する正規表現を記述できますか? Twitter で @rvtond とパターンを自由に共有してください。
if ( fgets ( line , 128 , file_pointer ) == Null ) // 1) if (...) returns 0
return 0 ;
...
if ( scanf ( "%d) %d" , & x , & y ) == 2 ) // 2) if (scanf("%d) %d", &x, &y) == 2) returns 0
return 0 ;
これらを comby と一致させるには、 if (:[condition])
を記述し、この言語が C に似ていることを示すフラグを 1 つ指定するだけです。置き換えはif (1)
です。実際の例を参照してください。
opamをインストールします。 TL;DR do sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
OCaml がインストールされていない場合は、これを実行します (OCaml コンパイラをブートストラップします)。
opam init
opam switch create 4.11.0 4.11.0
eval $(opam env)
を実行します
OS の依存関係をインストールします。
Linux: sudo apt-get install autoconf libpcre3-dev pkg-config zlib1g-dev m4 libgmp-dev libev4 libsqlite3-dev
Mac: brew install pkg-config gmp pcre libev
次に、ライブラリの依存関係をインストールします。
git clone https://github.com/comby-tools/comby
cd comby
opam install . --deps-only
make
make test
PATH
にcomby
インストールします make install