2016년 2월 4일 목요일

length(intersect(friendsOf x)(friendsOf y))

Facebook의 HAXL소개에 늘 나오는 대표적 예제

iterate(group>=>(sequence[length,head]))[1]

국내엔 개미수열로 알려진 'look and say' 수열

#define BITS_TO_BYTES(bits) ((bits)/8 + !!((bits)%8))

C에서 비트필드배열 만들 때 쓸만할 것 같음.
#define BITS_A 5
#define BITS_B 3
#define BITS_C 2
char bitfield[BITS_TO_BYTES(BITS_A + BITS_B + BITS_C)];

2014년 3월 21일 금요일

do-while one-liner


List<E> cached = new ArrayList<E>(); do cached.add(persistableResource.loadFrom(cursor)); while (cursor.moveToNext()); return cached;

GitHub Android Client 코드 중에서 do-while의 중괄호마저 빼버린 코드를 봤다. 나름 잘 읽힌다. cursor를 Collection으로 보고 mapping한 것 같기도 하고.
이 코드에서 특히한 또다른 점은 try-finally 짝을 적극적으로 사용한다는 점이다.

2012년 7월 9일 월요일

list_entry 매크로

#define list_entry(ptr, type, member) \
  ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

리눅스 커널에 사용된 링크드리스트에서 제공하는 매크로. list_node 포인터로부터 원래 구조체의 포인터를 얻기 위해 사용한다.

2011년 11월 3일 목요일

Arithmetic on Functions


(sin 2.5)
#| .5984721441039565 |#


(square 2.5)
#| 6.25 |#


((+ sin square) 2.5)
#| 6.848472144103956 |#


((+ (square sin) (square cos)) 2.5)
#| 1. |#




Jerald Sussman 이 2011년 Strange Loop에서 발표한 자료에 위와 같은 예제가 살짝 소개된다. 이렇게 하려면 +를 재정의해줘야 겠지만, 이렇게 할 수 있다는 것이.. 흠..


그러나 J에서는 이미 아무 문제 없이 가능한 이야기이다.


   cos=:2&o.
   sin=:1&o.
   square=:*:
   sin 2.5
0.598472
   square 2.5
6.25
   (sin + square) 2.5
6.84847
   ( square@sin + square@cos ) 2.5
1





참고 1. https://thestrangeloop.com/sessions/we-really-dont-know-how-to-compute

2011년 10월 12일 수요일

define extern

#define extern
#include "externs.h"

externs.h에 선언된 extern 변수의 정의위치를 찾으려는데 도저히 찾을 수 없는가? 위처럼 되어 있지는 않은지 찾아보라. 누군가는 이렇게라도 중복을 제거하고 싶었을지 모른다. (혹시 따라하는 사람 없겠지?)