というわけでおしらせです。

evalparkにSwiftが入園しました。

portsにlang/swiftが壊れたまま放置されていたのですが、これを手で修正しつつpkg化して入園しました。手元のFreeBSD:11:amd64な箱にも入園させたい人は、以下の要領で行けます。

# pkg install -A e2fsprogs-libuuid icu libedit libxml2 perl5 sqlite3
# fetch https://eval.dan.co.jp/friends/packages/All/swift-2.2.1_4.txz
# pkg add ./swift-2.2.1_4.txz

バージョンも2.2.1と1世代前で、linkerが未完成でswiftcが動かないとはいえ、swiftコマンドはスクリプトとしてもREPLとしてもきちんと使えてます。書いて覚えるSwift入門のコードサンプルはほとそのまま行けました。

#!/usr/local/bin/swift
func recall<T,R>(f:((T->R),T)->R)->T->R {
   var r:(T->R)!
   r = { n in f(r,n) }
   return r
}
let fact = recall { $1 <= 1 ? 1 : $1 * $0($1-1) }
for i in (0...20) {
  print(fact(i))
}

とはいえあくまで公式pkgが配布されるまでの野良pkgですものおおめにみててくださいませ。

Dan the Park Ranger Thereof

追記2017.04.29 Swiftを3.1に上げました。上のrecallのコードは以下の通り書き換えないと動きません。

#!/usr/local/bin/swift
func recall<T,R>(_ f:@escaping (((T)->R),T)->R)->(T)->R {
   var r:((T)->R)!
   r = { n in f(r,n) }
   return r
}
let fact = recall { $1 <= 1 ? 1 : $1 * $0($1-1) }
for i in (0...20) {
  print(fact(i))
}