makefile - makefile 图灵完整吗?

标签 makefile turing-complete

最近在工作中,我一直在进行一些从 Makefile 到替代构建系统的转换。我在某些地方看到过一些使用函数式映射、过滤器和 foreach 结构的非常复杂的 Make 代码。这让我感到惊讶,因为我认为构建脚本应该尽可能具有声明性。

无论如何,这让我思考:Makefile 语言(具体来说是最新的 GNU make)图灵完备吗?

最佳答案

是的,请参阅this 。一旦有了 lambda,一切就开始走下坡路了。

这是一个plagiarized斐波那契示例

这应该足以为更通用性奠定基础(我必须回去工作,否则我会玩更多。)

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,)

这会打印出平方数、斐波那契数和阶乘。数字大小似乎有 16 位限制。真糟糕。

关于makefile - makefile 图灵完整吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480950/

相关文章:

c++ - 使用 Makefile 和 GTest 对函数的 undefined reference

programming-languages - 确定它是否是一种编程语言的标准

blockchain - libra VM (Move) 是图灵完备的语言吗?

sql - 图灵完备的图查询语言

c++ - make 给出错误 make : *** No rule to make target `clean' . Stop

ffmpeg - 在 RHEL4 上构建 FFmpeg

intellij-idea - 将 IntelliJ IDEA 用于使用 Makefile 的项目

turing-complete - 我的编程语言中的 quine 看起来如何?

programming-languages - 像 Coq 这样的非图灵完备语言的实际限制是什么?

opencv - 安装 OpenCV 时 Raspberry Pi 出现“GL_PERSPECTIVE_CORRECTION_HINT”错误