gpt4 book ai didi

haskell - 访问列表中元素的两个邻居

转载 作者:行者123 更新时间:2023-12-02 02:20:02 25 4
gpt4 key购买 nike

我正在尝试在 haskell 中实现 Wolfram 的基本元胞自动机(规则 30)。

./wolfram 10 的结果:

          *          
***
** *
** ****
** * *
** **** ***
** * * *
** **** ******
** * *** *
** **** ** * ***

首先,我生成此列表:[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 ,0,0,0],其中 0 是 ' ',1 是 '*'

将此列表传递给函数 genNextLine::[Int] -> [Int] 将生成下一个列表。

对于给定元素,下一个元素由其两个邻居确定(例如:[0, 1, 1] 将生成 1)。

我可以像这样逐个元素地迭代列表:

genNextLine :: [Int] -> [Int]
genNextLine (x : xs) = ...

但是如何通过访问元素 x - 1xx + 1 来迭代列表?

最佳答案

您可以对任意长度的前缀使用模式匹配:

genNextLine :: [Int] -> [Int]
genNextLine (x1:x2:x3:xs) = (doSomethingWith x1 x2 x3):(getNextLine $ (x2:x3:xs))
genNextLine xs = xs

顺便说一句,使用zipWith3怎么样?

genNextLine :: [Int] -> [Int]
genNextLine (x1:x2:xs) = zipWith3 doSomethingWith (x1:x2:xs) (x2:xs) xs

关于haskell - 访问列表中元素的两个邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66547175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com