#define list_entry(ptr, type, member) \
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
리눅스 커널에 사용된 링크드리스트에서 제공하는 매크로. list_node 포인터로부터 원래 구조체의 포인터를 얻기 위해 사용한다.
2012년 7월 9일 월요일
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 변수의 정의위치를 찾으려는데 도저히 찾을 수 없는가? 위처럼 되어 있지는 않은지 찾아보라. 누군가는 이렇게라도 중복을 제거하고 싶었을지 모른다. (혹시 따라하는 사람 없겠지?)
2011년 9월 19일 월요일
primes less than 100
(-. c e. ,/ c */ c) # c =. }. >: i. 100
100보다 작은 소수를 출력한다. 아... 어렵네. c는 임시변수.
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
100보다 작은 소수를 출력한다. 아... 어렵네. c는 임시변수.
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
2011년 9월 16일 금요일
average = sum divided by count
average =. +/ % #
average 1 2 3 4 5
3
김창준 씨를 통해서 알게된 J라는 언어는 참 특이한 언어다. 기존에 알고 있던 프로그래밍의 틀을 깬다고 해야 하나? 가끔씩 매뉴얼을 들여다보고 도전해보지만 늘 어렵다. ㅠ.ㅠ
2011년 9월 8일 목요일
no comments
re.sub(r"(?s)/\*.*?\*/", "", source)
re.sub(r"//.*", "", source)
주석을 제거한 코드가 필요하여 작성한 코드이다. 정확하지는 않지만 그럭저럭 쓸만하다. 이 두 줄을 작성하는데도 많은 시행착오를 겪어야 했다. 완성하고 나면 뿌듯하지만 ...
re.sub(r"//.*", "", source)
주석을 제거한 코드가 필요하여 작성한 코드이다. 정확하지는 않지만 그럭저럭 쓸만하다. 이 두 줄을 작성하는데도 많은 시행착오를 겪어야 했다. 완성하고 나면 뿌듯하지만 ...
2011년 9월 7일 수요일
bsearch
void * bsearch ( const void * key, const void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
잘 쓰이지는 않지만 이미 구현되어 있다! C의 한계 덕분에 인자는 다섯 개나 되고, 그 중 두 개는 void *, 하나는 void* 두개를 받는 함수 포인터라는 정말 못생긴 모양을 갖게 되었지만... 직접 구현하거나 구글에서 출처를 알 수 없는 코드를 복사하여 붙여넣기보다는 그냥 구현되어 있는 것을 이용하는 것은 어떨까?
--코드리뷰하다가
잘 쓰이지는 않지만 이미 구현되어 있다! C의 한계 덕분에 인자는 다섯 개나 되고, 그 중 두 개는 void *, 하나는 void* 두개를 받는 함수 포인터라는 정말 못생긴 모양을 갖게 되었지만... 직접 구현하거나 구글에서 출처를 알 수 없는 코드를 복사하여 붙여넣기보다는 그냥 구현되어 있는 것을 이용하는 것은 어떨까?
--코드리뷰하다가
피드 구독하기:
글 (Atom)