メモ:RのCAR、CDR、CADR、CDAR、CDDR...

CARとかCDRとかいうのはLISP由来のなにからしい。

この図を見てわかった気持ちになった。

定義はこのへん。

rlangにはRの関数として用意されている(ただしexpert onlyなやつ)。

library(rlang)

A <- as.pairlist(c(a = "a", b = "b"))
B <- as.pairlist(c(A = "A", B = "B"))
x <- pairlist(foo = A, bar = B, baz = "baz")

lobstr::ast(!!x)
#> o-foo = o-a = "a" 
#> |       \-b = "b" 
#> +-bar = o-A = "A" 
#> |       \-B = "B" 
#> \-baz = "baz"
lobstr::ast(!!node_car(x))
#> o-a = "a" 
#> \-b = "b"
lobstr::ast(!!node_cdr(x))
#> o-bar = o-A = "A" 
#> |       \-B = "B" 
#> \-baz = "baz"
lobstr::ast(!!node_cadr(x))
#> o-A = "A" 
#> \-B = "B"
lobstr::ast(!!node_cdar(x))
#> o-b = "b"
lobstr::ast(!!node_cddr(x))
#> o-baz = "baz"
lobstr::ast(!!node_tag(x))
#> foo

Created on 2019-02-21 by the reprex package (v0.2.1)