LINUX.ORG.RU

Сообщения qweqwe

 

экспорт определений для 1-й фазы

такой способ:

#lang racket

(module proc-module racket
  (provide make-stx)

  (define (make-stx) #''i-am-syntax)
  
  )


(require (for-syntax 'proc-module))

(define-syntax (transformer stx) (make-stx))

(transformer)

возвращает ошибку
quote: unbound identifier;
 also, no #%app syntax transformer is bound
  at: quote
  in: (quote i-am-syntax)

такой

#lang racket


(module proc-module racket
  (provide (for-syntax make-stx))

  (define-for-syntax (make-stx) #''i-am-syntax)
  
  )


(require 'proc-module)

(define-syntax (transformer stx) (make-stx))

(transformer)
работает, но неудобен по некоторым причинам.

Почему не работает первый способ и работает второй?

Как сделать правильно в манере первого способа (без define-for-syntax)?

 

qweqwe
()

не работает звук

При подключении к гнезду на передней панели системника - работает, а к заднему - нет. В винде работает на обоих гнездах. Потыкал в настройки из kmix'a - безрезультатно. На большее меня не хватило.

qweqwe
()

макрос, генерация объявлений

Как определить простой макрос, который получает два символа на вход и определяет новый, являющийся результатом их конкатенации?

пытаюсь так - не работает:

#lang racket

(define-syntax (suffixify stx)
  (syntax-case stx ()
    [(_ sym suffix)
     (let ([id (string->symbol (format "~a~a"
                                       (syntax->datum #'sym)
                                       (syntax->datum #'suffix)))])
       
       #`(define #,id 'something))]))

;; (suffixify wtf ?)
;; wtf? => 'something

 

qweqwe
()

parsack, вопрос

как сделать нежадным many1?

#lang racket

(require (lib "parsack"))

(define $sep (char #\ ))

(define $cell (many1 $anyChar))

(define $cells (parser-cons $cell $rest))

(define $rest (<or> (parser-cons $sep $cells)
                    (return null)))

(parse-result $cells "asd asdf")
нужно получить
'((#\a #\s #\d) #\space (#\a #\s #\d #\f))
разделитель нужно задавать именно парсером

 ,

qweqwe
()

можно как-нибудь восстановить исходник? :(

сабж 8(

Стер около 500 строк. Бэкапы перезаписались, скомпилированного модуля с потерянными строками нет. Загруженного кода в репле тоже нет.

 , ,

qweqwe
()

статическая очередь с доступом по индексу

Статическая, то есть, с фиксированным размером. Например, для 5 у меня такой массив

[1 2 3 4 5]
нужно вставить 6 на место 5, 1 выкинуть, остальные сдвинуть влево
[2 3 4 5 6]
Размер большой, операций вставки много. Как тут делается эффективная реализация для таких штук? Может есть готовый код?

 ,

qweqwe
()

как статически доказать эквивалентость двух произвольных алгоритмов

Под эквивалентностью я подразумеваю равенство выходных данных и произведенных побочных эффектов

Например, для двух функций вычислений n-го числа фибоначчи (питон)


def fib1(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

def fib2(n):
    if n < 2:
        return n
    return fib2(n-1) + fib2(n-2)

как доказать что соотношения множеств входных и выходных данных для этих функций одинаковы (не учитывая переполнение стека для второй) ?

Питон тут для примера, для какого-нибудь лиспа, наверное, проще будет сделать это

 

qweqwe
()

python, c api, линковка исходников

не получается собрать

some-dir/cext/add.c

#include "arth.h"

static PyObject* add(PyObject* self, PyObject* args) {
    int a, b;

    if (!PyArg_ParseTuple(args, "ii", &a, &b))
	return NULL;
    
    return Py_BuildValue("(i)", a+b);
}
some-dir/cext/mult.c
#include "arth.h"

static PyObject* add(PyObject* self, PyObject* args) {
    int a, b;

    if (!PyArg_ParseTuple(args, "ii", &a, &b))
	return NULL;
    
    return Py_BuildValue("(i)", a*b);
}
some-dir/cext/arth.h
#include <Python.h>

static PyObject* add(PyObject* self, PyObject* args);
static PyObject* mult(PyObject* self, PyObject* args);
some-dir/cext/arth.c
#include "arth.h"

static PyMethodDef ArthMethods[] = {
    {"add", add, METH_VARARGS, "a + b"},
    {"mult", mult, METH_VARARGS, "a * b"},
    {NULL, NULL, 0, NULL}
};

static struct PyModuleDef arth_module = {
    PyModuleDef_HEAD_INIT,
    "arth",   
    NULL, 
    -1,       
    ArthMethods
};
 
PyMODINIT_FUNC PyInit_arth(void)
{
    return PyModule_Create(&arth_module);
}
some-dir/setup.py
from distutils.core import setup, Extension

module1 = Extension('acc',
                    sources=['cext/add.c',
                             'cext/mult.c',
                             'cext/arth.c'])

setup(ext_modules = [module1])

компиляция

python3 setup.py build_ext --inplace
running build_ext
building 'acc' extension
gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python3.3m -c cext/add.c -o build/temp.linux-i686-3.3/cext/add.o
cext/add.c:3:18: warning: ‘add’ defined but not used [-Wunused-function]
cext/arth.h:4:18: warning: ‘mult’ declared ‘static’ but never defined [-Wunused-function]
gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python3.3m -c cext/mult.c -o build/temp.linux-i686-3.3/cext/mult.o
cext/mult.c:3:18: warning: ‘add’ defined but not used [-Wunused-function]
cext/arth.h:4:18: warning: ‘mult’ declared ‘static’ but never defined [-Wunused-function]
gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include/python3.3m -c cext/arth.c -o build/temp.linux-i686-3.3/cext/arth.o
cext/arth.h:3:18: warning: ‘add’ used but never defined [enabled by default]
cext/arth.h:4:18: warning: ‘mult’ used but never defined [enabled by default]
gcc -pthread -shared build/temp.linux-i686-3.3/cext/add.o build/temp.linux-i686-3.3/cext/mult.o build/temp.linux-i686-3.3/cext/arth.o -o /home/username/some-dir/acc.cpython-33m.so

Compilation finished at Sat Nov 16 19:04:00
запуск some-dir/test.py
import acc
print(acc.add(1,2))
----> 1 import acc
      2 print(acc.add(1,2))
      3 

ImportError: ./acc.cpython-33m.so: undefined symbol: add

что я делаю не так?

 

qweqwe
()

посоветуйте дистрибутив

критерии следующие:

  • минимум усилий при установке с флешки
  • легкий DE (комп celeron 2.4ghz, 512ram)
  • работающий skype, wine
  • желательно, но не критично небольшой размер (канал 256кбит/c)

 

qweqwe
()

RSS подписка на новые темы