Присвоения не являются выражениями в Kotlin, поэтому вам нужно сделать это снаружи:
var a: Int? = 1
var b: Int? = 2
var c: Int? = 1
a = b
if (a != c)
print(true)
Для вашего другого примера с InputStream
вы могли бы сделать:
fun readFile(path: String) {
val input: InputStream = FileInputStream(path)
input.reader().forEachLine {
print(it)
}
}
Можно использовать setf
и nth
заменять и получать значения индексом.
(let ((myList '(1 2 3 4 5 6)))
(setf (nth 4 myList) 101); <----
myList)
(1 2 3 4 101 6)
Для нахождения индексом, можно использовать position
функция.
(let ((myList '(1 2 3 4 5 6)))
(setf (nth 4 myList) 101)
(list myList (position 101 myList)))
((1 2 3 4 101 6) 4)
Я нашел их все в этом индексе функций.
- найдите индекс чего-то в списке.
В Lisp Emacs и языке Common LISP, Вы имеете position
функция:
> (setq numbers (list 1 2 3 4))
(1 2 3 4)
> (position 3 numbers)
2
В Схеме вот является хвост рекурсивной реализацией из документа DrScheme:
(define list-position
(lambda (o l)
(let loop ((i 0) (l l))
(if (null? l) #f
(if (eqv? (car l) o) i
(loop (+ i 1) (cdr l)))))))
----------------------------------------------------
> (define numbers (list 1 2 3 4))
> (list-position 3 numbers)
2
>
Но если Вы используете список в качестве набора слотов для хранения структурированных данных, возможно, необходимо взглянуть на defstruct
или даже некоторая Система Объекта Lisp как CLOS.
Если Вы изучаете Lisp, удостоверьтесь, что Вы взглянули на Практический язык Common LISP и / или Маленький Интриган.
Удачи!
Ответы:
(последовательность объекта положения &key от конца (запускаются 0) тестовый тест клавиши End - не),
http://lispdoc.com/?q=position&search=Basic+search
(setf (elt упорядочивают индекс) значение),
(elt упорядочивают индекс),
http://lispdoc.com/?q=elt&search=Basic+search
Примечание: elt предпочтителен для энного, потому что работы elt над любой последовательностью, не просто перечисляет
Ответы Jeremy должны работать; но это сказало при нахождении себя написанием кода как
(setf (энный я мой-список) новый-elt)
Вы, вероятно, используете несправедливость datastructure. Списки являются просто связанными списками, таким образом, они - O (N) к доступу индексом. Вы могли бы быть более обеспеченными массивами использования.
Или возможно Вы используете списки в качестве кортежей. В этом случае они должны быть в порядке. Но Вы, вероятно, хотите назвать средства доступа, таким образом, кто-то читающий Ваш код не должен помнить то, что "энные 4", как предполагается, означает. Что-то как
(defun my-attr (list)
(nth 4 list))
(defun (setf my-attr) (new list)
(setf (nth 4 list) new))
+2 для "Практического языка Common LISP". Это - смесь Поваренной книги языка Common LISP, и качество Преподают Себе книгу Lisp.
Существует также "Успешный язык Common LISP" (http://www.psg.com/~dlamkins/sl/cover.html и http://www.psg.com/~dlamkins/sl/contents.html), который, казалось, заполнился, несколько разрывов / расширяют вещи в "Практическом языке Common LISP".
Я также считал "язык Common LISP ANSI Paul Graham", который является больше об основах языка, но немного большем количестве справочника.
Я должен согласиться с Thomas. Если Вы используете списки как массивы затем, это просто будет медленным (и возможно неловкий). Таким образом, необходимо или использовать массивы или палку с функциями, Вы записали, но перемещаете их вверх способом так, чтобы можно было легко заменить медленные списки массивами позже.