Introduction When I first stumbled into Lisp advocacy on various corners of the web I was already an experienced programmer. At that point I had grokked what seemed at the time a wide range of programming languages. I was proud to have the usual suspects (C++, Java, C#, etc.) on my service record and was under impression that I knew everything there is to know about programming languages. I couldn
ちょっとしたテキスト処理や日々の仕事で自分だけが使うコマンドラインツールの作成にScheme……というか、Gaucheはとても便利です。みなさんもそうですよね? そんなみなさんであれば、きっと常にuseしたくなるオレオレマクロモジュールがあるにちがいありません。濫用するなと厳しく教えられるマクロではありますが、自分しか使わないごく小規模のプログラムであれば気にする必要もないでしょう。オレオレマクロと喧嘩はLISPの華、書くのが楽なほうがよっぽど大事なわけですから。 もちろん、私にもそんなマクロがいくつかあります。「標準のifをArcライクなifで上書きする」という影響範囲がめちゃくちゃ大きいやつとかもお気に入りなのですが、今回はそれは置いておいて、Clojureのスレッドマクロの亜種を晒すことにします。 仕様 「亜種」と言ったとおり、実はClojureにあるものそのままではありません。自分
Posted on May 21st, 2018. I haven't written anything in a while. But after seeing the metaprogramming video on Computerphile the other day I felt the urge to write about Lisp again, so I decided to do a small series of posts on fun/useful little Common Lisp macros I've made over the past couple of years. The MacroNotesDefault LET BindingsHygieneData StructuresDynamic ExtentExamplesPandigitalsHash
#define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) #include<stdio.h> #define Def 10 #define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) enum test{Enum}; int main(){ int Val = 10; const int Const_val = 10; int a = __is_constexpr(Val); int b = __is_constexpr(Const_val); int c = __is_constexpr(10); int d = __
4. 代入を簡略化するマクロ 4.1. はじめに 今回は値を代入するマクロについて解説します。値を代入するマクロとしては setf がありますが、タイプ量が多くなりがちな欠点があります。 ここでは、単に値を代入するマクロ、変数を操作してその結果をもともとの変数に 代入するマクロ、さらに一般的な代入マクロについて述べたいと思います。 4.2. 単に値を代入するマクロ 単に値を代入するだけなら、新しく定義するマクロの中で setf がそのまま使えます。 例として、引数を全て同じ値にセットする allfonlisp を取り上げます。 allf を使って、全ての引数を t または nil にセットする tfonlisp, nilfonlisp が定義できます。 (defmacro allf (val &rest args) ; (1) (let ((gval (gensym))) `(let ((
I used to think that macros were just a feature that a language included or lacked. In practice, there’s a huge design space of how macro systems can be implemented. I thought it would be interesting to take a look at implementing the same two macros in different languages. We’ll look at both established macro systems and newer languages. We’ll compare readability, robustness and safety in each la
The thing about both Lisp and Smalltalk that keeps making me feel alienated is that their power seems much weaker beyond their kingdom. The outside world does not have an object browser, nor is it made of s-expressions.Tcl occupies a very nice place in this regard: its homoiconicity and symmetry (and late binding) come from text. The outside world, to a very close approximation, is also made of te
概要: Rustマクロは2つの意味で衛生的である。その衛生性の説明とともに、それを実現するためのコンパイラの仕組みを説明する。 Rustマクロの2つの衛生性 Rustマクロ (ja) は次の2つの意味で衛生的(hygienic; 健全ともいう)である。 マクロ内で導入される変数名と、マクロ呼び出し側の変数名が衝突しない。(Lispマクロの意味での衛生性) 構文の優先順位の違いによる非直感的な挙動が発生しない。 この記事では、識別子に関する衛生性を説明する。(構文の優先度に関する衛生性については次記事を参照) 識別子に関する衛生性とは 次のようなプログラムが直感的な動作をするのが、識別子に関する衛生性である。 macro_rules! copy_swap { ($x:expr, $y:expr) => {{ let t = $x; $x = $y; $y = t; }}; } fn main
http://atnd.org/events/1593 のカンニングペーパーを貼ります。プレゼン資料: http://scratch.mit.edu/projects/propella/811272 自己紹介 こんにちは、山宮と言います。STEPS プロジェクトの紹介をします。 まず簡単に自己紹介をさせてください。2003 年に梅澤さん達と同時期に未踏事業で Smalltalk を作ったアランケイに会いまして、その関係で三年前から彼の研究所であるロサンゼルスのビューポインツに居ます。ビューポインツとは、アラン・ケイが率いるNPO の研究組織で、多くの Squeak 開発メンバーが参加しています。 概要 STEPS プロジェクトは 2007 年に NSF の支援を受けて始まった5 年間の研究プロジェクトです。今回 STEPS プロジェクトの内でも特にプログラミング好きの皆様が興味を持ちやすい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く