Oui, voir this. Une fois que vous avez lambda, tout est descendu de là.
Voici un exemple
plagiarized Fibonacci
Cela devrait être suffisant pour construire une base pour plus de généralité (je dois retourner au travail, ou je jouerais plus.)
dec = $(patsubst .%,%,$1)
not = $(if $1,,.)
lteq = $(if $1,$(if $(findstring $1,$2),.,),.)
gteq = $(if $2,$(if $(findstring $2,$1),.,),.)
eq = $(and $(call lteq,$1,$2),$(call gteq,$1,$2))
lt = $(and $(call lteq,$1,$2),$(call not,$(call gteq,$1,$2)))
add = $1$2
sub = $(if $(call not,$2),$1,$(call sub,$(call dec,$1),$(call dec,$2)))
mul = $(if $(call not,$2),$2,$(call add,$1,$(call mul,$1,$(call dec,$2))))
fibo = $(if $(call lt,$1,..),$1,$(call add,$(call fibo,$(call dec,$1)),$(call fibo,$(call sub,$1,..))))
fact = $(if $(call lt,$1,..),.,$(call mul,$1,$(call fact,$(call dec,$1))))
numeral = $(words $(subst .,. ,$1))
go = $(or $(info $(call numeral,$(call mul,$1,$1)) $(call numeral,$(call fibo,$1)) $(call numeral,$(call fact,$1))),$(call go,.$1))
_ := $(call go,)
Ceci imprime des carrés, des nombres de fibonacci et des factoriels. Il semble y avoir une limite de 16 bits sur la taille des nombres. Bummer.
Sans votre description, je vous demanderais si vous résolviez un pari :) –
C'est sous Unix, il a une syntaxe velue, et il est étonnamment puissant. La plupart des choses comme ça sont Turing-complètes. Je n'ai pas été surpris il y a vingt ans quand quelqu'un m'a montré une machine vi macro Turing. –
Vous pouvez débourser à tout ce que vous aimez, y compris une machine de Turing, pendant la construction des cordes. Techniquement, vous avez perdu à ce stade. (Nous avons des appels Perl dans nos Makefiles. –