gpt4 book ai didi

Swift L-系统藻类

转载 作者:行者123 更新时间:2023-11-28 06:50:30 25 4
gpt4 key购买 nike

所以这只是我在 IBM Swift 沙箱中为了好玩而做的事情。我最近在 Scala 中做了一个 L-system algae,尽管在 Swift 中做它会很酷,看看语言如何比较。

https://github.com/I2obiN/L-System-Algorithms-and-Fractals/blob/master/algae.scala

这就是 Scala,向您展示了我的目标,这就是我在 Swift 中所拥有的;

/**
* Created by t.hood on 26/01/16
* L-System Algae
*
*/

import Foundation

// Mapping function for string

func stringmap(x: String) -> String {
var str = x;

// Replace characters in string
str = x.stringByReplacingOccurrencesOfString("A", withString: "AB") +
str.stringByReplacingOccurrencesOfString("B", withString: "A");

// Return mapped string;
return str;
}

func lsys() {

// Declarations

var iteration : Int = 2;
var x = 0;
var lsystem: String = "A";
let charA: Character = "A";
let charB: Character = "B";

while(x != iteration) {

print(lsystem)

// Iterate through characters in string
for chars in lsystem.characters {
lsystem = stringmap(lsystem);
}

// Inc count ..
x+=1

}
}

// Run ..
lsys();

我遇到的问题是我的映射函数。我需要它来映射 x,打印结果,然后在 str 上做下一个映射。问题是我在两个映射之间都有运算符 +,但在第一次操作后我无法快速打印 str。

有人知道如何解决这个问题吗?如果我可以在第一次替换后打印 str,我认为它会起作用。

最佳答案

我在 Xcode 中创建了一个项目,这样我就可以使用调试器来查看发生了什么。这是我的发现。

我将您的 print 语句移到了 for 循环中,这样每次循环执行时它都会显示 lsystem 的值。

while 循环执行两次,当 x == 0 和 1第一次通过while循环lsystem == 'A',所以for循环执行一次。在 stringmap() 中,“A”变为“ABA”。打印“ABA”。第二次通过 while 循环时,for 循环执行了三次。对于循环 1:'ABA' 被发送到 stringmap() 并返回 'ABBABAAA'。对于循环 2:'ABBABAAA' 被发送到 stringmap() 并返回 'ABBBABBABABABAAAAAAAA'。对于循环 3:'ABBBABBABABABAAAAAAAAA' 被发送到 stringmap() 并返回 'ABBBBABBBABBABBABBBABABABABABABABAAAAAAAAAAAAAAAAAAAAA'。

我修改了您的 stringmap() 函数以逐个字符地遍历字符串并将语法应用于每个字符,将每个更改附加到一个新字符串,然后返回到 lsys()。

while 循环的七次迭代返回了这个,这与我在维基百科关于 L 系统的文章中看到的一致。迭代 0:A迭代 1:AB迭代 2:ABA迭代 3:ABAAB迭代 4:ABAABABA迭代 5:ABAABABAABAAB迭代 6:ABABABAABAABABAABABA迭代 7:ABABABAABAABABAABABAABAABABAABAAB

这是代码。这适用于我的 iMac 上的 Playground ,我希望它也适用于 IBM Swift 沙箱。

func stringmap(x: String) -> String
{
var returnString = ""

for char in x.characters
{
switch (char)
{
case "A" :
returnString += "AB"
break
case "B":
returnString += "A"
break
default:
break
}
}
return returnString
}


func lsys()
{

// Declarations

let iteration : Int = 7;
var x = 0;
var lsystem: String = "A";

print("Iteration \(x): \(lsystem)")

while(x != iteration)
{
lsystem = stringmap(lsystem)
x++
print("Iteration \(x): \(lsystem)")

}
}

lsys()

关于Swift L-系统藻类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35057948/

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