Swift в терминале

Рейтинг: 0Ответов: 1Опубликовано: 26.02.2015

Мне в терминале нужно решать математические выражения. Например, если я захожу и пишу в терминале:

swift
import Foundation
2+2*5(exp*5(sin-M_PI)/2)

Но мне требуется сделать файл File.swift, с помощью которого в терминале я буду прописывать, например:

./File.swift “2+2*5(exp*5(sin-M_PI)/2)”

Он выдает ошибку:

./File.swift: line 1: import: command not found

Хотя файл File.swift имеет только строку import Foundation.

В чем проблема или я не в том русле думаю?

Обновление

Вот мое задание. От вас требуется скрипт на Swift (например, файл calc.swift), который можно запустить из консоли следующим образом:

chmod +x calc.swift 
./calc.swift “5+5*3 + 1” 
21

Если я просто в консоли захожу в swift:

swift
import foundation
5+5*3+1
21

то все получается.

Но если создаю файл calc.swift, в котором прописана строка import foundation, и пробую решить пример:

./calc.swift "5+5*3+1"

То выводит ошибку:

./calc.swift: line 1: import: command not found

В чем проблема?

Ответы

▲ 1

Ты не сказал bash'у (или что у вас там в MacOS'и), чем твой скрипт открывать, вот он и пытается его исполнить как обычный скрипт для терминала.

Попробуй в самое начало файла вставить спецкомент, который скажет, чему скормить твой файл:

Пример файла:

#!/usr/bin/env xcrun swift -i

<Твой код>

Обновление

Я swift никогда не видел и ванговать не умею, однако могу сказать, что, скорее всего, как и в любом другом языке программирования, в нем есть обработка агрументов.

Вот нашел вот это: https://medium.com/swift-programming/1-learn-swift-by-running-scripts-73fdf8507f4b

Парси по слову Arguments.

Я не знаю, зачем тебе решать в терминале мат. выражения, но для этих целей лучше подойдет Python с библиотеками Numpy и matplotlib.

Я лично предпочитаю все это дело (связку библиотек) в режиме с webgui на ipython: http://habrahabr.ru/post/218869/

Так я оформлял диплом и много чего еще.


UPD

В общем, ты можешь использовать классический eval. Точно не знаю, как правильно в swift реализовывать это, но можно поступить примерно так:

let expn = NSExpression(format:"3+3")
println(expn.expressionValueWithObject(nil, context: nil))
// Вывод: 6

UPD #2

Т.к. комментарии нельзя больше писать

А что вам мешает проявить фантазию и заменить ту строку ("3+3") аргументом командной строки? Но данный подход достаточно небезопасен, т.к. не защищен от любых других команд я полагаю.